Python'da Referansa Karşı Değere Göre Geçin

Pass Reference Vs



Python'u öğrendikten sonra, özellikle diğer birçok bilgisayar diline aşina iseniz, tahmin edebileceğiniz gibi işlevlerin argümanları bir noktada değiştirmediği durumlar bulabilirsiniz. Birçok dil, referans olarak geçerli değişkenlere referans olarak iletmek olarak tanımlanan yöntem bağımsız değişkenlerini kullanır. Python'un yöntem argümanlarını ele almanın özel yolunu kavramak isteyen ileri düzey bir Python geliştiricisiyseniz, bu kılavuz tam size göre.

Python, Nesne Referansına Göre Geçişi Destekler

Referansa göre geçiş ve değere göre geçiş, inkar edilemez şekilde programlama dilleri arasında parametre geçişi yapmanın en iyi tanınan ve kolay anlaşılır iki yoludur. Python, ne yazık ki, 'nesneden referansa', ne Değere Göre Geçer ne de Referansa Göre Geçer, genellikle Nesne Referansına 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 bakmak yararlıdır:







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 düşünelim. Bu örnekte, bir değişken tanımladık ' sinirli' değerine sahip 4 . Bu senaryo boyunca, değişken ' sinirli' yerinde değiştirilmemiştir. Python, mevcut bir değişkene bağımsız bir değer olarak bir referans 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, bu nedenle ne Referans ne de değer ile. Bunun mantığı iki yönlüdür:



Şu anda, geçen parametre bir nesneye yönelik bir işaretçidir. Bazı veri türleri değiştirilebilir, bazıları ise değiştirilebilir değildir.

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şlevde 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ç

Öncelikle şunu anlamalısınız ki mylist değişkeni bir liste değil, değerleri olan bir listeyi ifade eder. 'mylist' değişkenini, içinde değerlere sahip bir kapsayıcı olarak adlandırabilirsiniz. Liste değerleri nesnelerdir. 'mylist' değişkeni, içeriğiyle birlikte doğrudan fonksiyona iletilmiştir.

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 nedenle çıktıda 'Saeed' yazdırılır.

Değişken veya varlık üzerinde yapılan herhangi bir eylem, 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 'Aksa' elementine sahip yepyeni bir liste yazdırdık. Bunun nedeni, değiştirilmiş listeyi geri döndürüp arayanla aynı satırda yazdırmış olmamı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önteme, arayanın kendisine atadığı argüman nesnesinin bir kopyası 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 tüm işlemler 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 çağıran 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.

Çözüm

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.