Python, Nesne Referansına Göre Geçişi Destekler
Referansa göre geçiş ve değere göre geçiş, inkar edilemez bir şekilde programlama dilleri arasında geçişi parametrelendirmenin en iyi tanınan ve kolay anlaşılır iki yoludur. Python, ne yazık ki, 'nesneye göre referans'tır, ne "Değere Göre Geçer" ne de "Referansla Geçer", genellikle "Nesneye Göre Çağrı" ve "Paylaşıma Göre Çağrı" olarak adlandırılır.” Referans ile geçmenin teknik özelliklerine girerken, onu segmentlere ayırarak kavramın kendisine daha yakından bakmakta fayda var:
Geçmek: bu, bir argümanla bir yöntem sağlamak anlamına gelir.
Referans olarak: bu, yönteme geçtiğiniz argümanın, o değişkenin farklı bir kopyası yerine artık depoda bulunan bir değişkene atıfta bulunduğu anlamına gelir.
Yönteme tanımlanmış bir değişkene bir referans atadığınızda, karşılık geldiği değişken bu Referans üzerindeki tüm işlemlerden açıkça etkilenir. Şimdi bunun pratikte nasıl çalıştığına dair bir örnek ele alalım. Bu örnekte, bir değişken tanımladık 'arg' değerine sahip 4. Bu senaryo boyunca, değişken 'arg' onun yerine değiştirilmedi. Python, mevcut bir değişkene bağımsız bir değer olarak referans vermek yerine, sağladığınız argümanı ele alıyor gibi görünüyor.
Bu, Python'un Referans yerine argümanları değere göre hareket ettirdiği anlamına mı gelir?? Python, argümanları atama yoluyla hareket ettirir, yani ne Referans ne de değer ile. Bunun mantığı iki yönlüdür:
Şu anda, geçen parametre bir nesneye işaretçidir. Bazı veri türleri değiştirilebilir ve bazıları değiştirilemez.
Değişken bir nesneyi bir işleve taşırsak, işlev aynı nesneye bir referans alır, böylece hepsini ruhunuzu tatmin edecek şekilde değiştirebilirsiniz; ancak, işlevdeki Referans'a yeniden katılmadan önce dış kapsam hiçbir şey bilmez. Bitirdiğinizde, harici Referans yalnızca asıl nesneyi hedefleyecektir. Değişmez bir nesneyi bir işleve taşırsanız, harici Referans her zaman yeniden bağlanamaz ve nesneyi yalnızca değiştiremezsiniz. İşleri çok daha basit hale getirmek için, tek tek anlayalım.
Referansa Göre Geç
Her şeyden önce, 'mylist' değişkeninin kendisinin bir liste olmadığını, değerleri olan bir listeye atıfta bulunduğunu anlamalısınız. 'mylist' değişkenini, içinde değerleri olan bir kap olarak adlandırabilirsiniz. Liste değerleri nesnelerdir. 'mylist' değişkeni, içeriğiyle birlikte doğrudan işleve teslim edildi.
Aşağıdaki kod örneğinde hem "liste" hem de "listem" aynı depolama değişkeni gibi görünüyor ve bu nedenle aynı depolama nesnesi için geçerli. Bu yüzden çıktıda 'Saeed' yazıyor.'
Değişken veya varlık üzerinde yapılan herhangi bir işlem, hemen arayan yöntemine yansıtılacaktır. Yöntem, değişkenin değerini tamamen değiştirebilir ve onu tamamen farklı bir nesneye hedefleyebilir. 'set_list' fonksiyonunda görebileceğiniz gibi, liste içeriğini değiştirdik ve 'Aqsa' elementine sahip yepyeni bir liste yazdırdık.' Bunun nedeni, değiştirilen listeyi geri döndürmemiz ve arayanla aynı satırda yazdırmamızdır.
Yöntem ayrıca aşağıdaki gibi aynı sonuç için değişkenin öğelerini yeniden tahsis edebilir. Listeye yeni bir değer eklediğimizi ve değişikliğin yansıtıldığını görebilirsiniz. Bir listeye benzersiz bir dize ekledik ve onu arayan kişiye geri gönderdik. Sonuç olarak, yöntem ve arayan, geçiş ilişkisi boyunca aynı değişkeni ve nesneyi kullanıyor.
Değere Göre Geçiş
Değere göre geçiş yoluyla, yöntem, arayanın kendisine atadığı argüman nesnesinin bir kopyası ile sağlanır. Bu, orijinal öğenin değişmeden kalmasını ve yapılan tüm değişikliklerin aynı nesnenin bir kopyasında ayrı bellek konumlarında tutulmasını sağlar.
Yöntem tarafından bir değişken veya varlık üzerinde yürütülen herhangi bir işlem için eşit derecede geçerlidir. Çağıran yöntemin kapsamındaki değişkenlerin ve nesnelerin kopyaları, bunları özetlemek için tamamen ayrılır.
Referansa Göre Nesneyi Geç
Bu durum boyunca, Python farklı olduğundan, Python'un yöntemleri, arayanın başvurduğu gibi depodaki çok benzer nesne referansını elde eder. Tersine, teknik 'mylist' (kap) değişkenini elde etmez. Çağıran yöntemi aynı nesneyi depolar; yöntem, kişinin kapsayıcısını oluşturur ve tıpkı değer geçişinde olduğu gibi, kendisi için tamamen yeni bir dizin oluşturur.
Çağıran ve yöntem, depolamadaki aynı nesneden bahseder, ancak eklenen yöntem bir listeye harici bir öğe uyguladığında, arayan varlık değiştirilir. Birden fazla etiketleri var, ancak aynı şeyler. Her iki değişken de çok benzer bir nesneyi tutar. Nesne tarafından hareket ettirilmesiyle olan ilişkisinin ardındaki anlam budur. Depolamada, yöntem ve arayan benzer bir nesne kullanır, ancak bunları birden çok değişken aracılığıyla yakalar. Çağıran değişken (kap), yöntem değişkeninde (kapsayıcı) yapılan herhangi bir değişiklikle değiştirilmeyecektir; yalnızca veriler veya içerik değiştirilir.
Sonuç
Python, Referans veya argümanların değerine göre hareket etmeyi kabul eden dillerden bağımsız olarak çalışır. Yöntem bağımsız değişkenleri, yönteme aktarılan her bir değere tahsis edilmiş yerel değişkenlerdir. Ancak bu yine de, argümanları proxy ile taşırken diğer dillerde bulacağınız sonuçları elde etmenizi engellemez.