Lulus dengan Rujukan vs Nilai di Python

Pass Reference Vs



Setelah mengetahui Python, anda dapat menemui keadaan di mana fungsi tersebut tidak mengubah argumen di tempat seperti yang anda jangkakan, terutamanya jika anda mengetahui banyak bahasa komputer lain. Banyak bahasa menggunakan argumen kaedah sebagai rujukan, yang ditakrifkan sebagai menyampaikan dengan merujuk kepada pemboleh ubah semasa. Sekiranya anda seorang pembangun Python yang mahir yang ingin memahami cara tertentu untuk menangani argumen kaedah Python, maka panduan ini sangat sesuai untuk anda.

Python Menyokong Lulus dengan Rujukan Objek

Pass-by-referensi dan pass-by-value tidak dapat dinafikan adalah dua kaedah yang paling dikenali dan mudah difahami untuk parameter melewati antara bahasa pengaturcaraan. Sayangnya, Python adalah 'rujukan-demi-objek-rujukan', bukan Lintas Nilai atau Lulus dengan Rujukan, sering disebut sebagai Panggilan oleh Objek Rujukan dan juga Panggilan oleh Perkongsian. Adalah berguna untuk melihat lebih dekat konsep itu sendiri dengan membaginya menjadi beberapa segmen semasa anda terjun ke dalam spesifikasi teknikal melalui Rujukan:







Lulus: ini bermaksud membekalkan kaedah dengan hujah.



Dengan Rujukan: ini bermaksud argumen anda beralih ke kaedah merujuk kepada pemboleh ubah yang kini berada dalam simpanan dan bukannya replika pemboleh ubah yang berbeza.



Semasa anda memberikan kaedah ini sebagai rujukan kepada pemboleh ubah yang ditentukan, pemboleh ubah yang sesuai dengannya akan dipengaruhi secara eksplisit oleh semua operasi pada Rujukan ini. Sekarang mari kita pertimbangkan contoh bagaimana, dalam praktiknya, ini berfungsi. Dalam contoh ini, kami telah menentukan pemboleh ubah ' marah ' mempunyai nilai 4 . Sepanjang senario ini, pemboleh ubah ‘ marah ' tidak diubah suai pada tempatnya. Python nampaknya menangani hujah yang anda berikan dan bukannya merujuk kepada pemboleh ubah yang ada sebagai nilai yang serba lengkap.





Adakah ini bermaksud bahawa bukannya dengan Rujukan, Python memindahkan argumen berdasarkan nilai? Python menggerakkan argumen melalui penugasan, jadi baik dengan Rujukan maupun dengan nilai. Logik untuk ini adalah dua kali ganda:



Saat ini, parameter yang masuk adalah penunjuk ke objek. Jenis data tertentu boleh berubah, dan beberapa data tidak dapat diubah.

Sekiranya kita memindahkan objek yang dapat diubah ke dalam fungsi, fungsi tersebut memperoleh rujukan ke objek yang sama sehingga anda dapat mengubah semua itu untuk memuaskan jiwa anda; namun, ruang lingkup luaran tidak akan mengetahui apa-apa sebelum anda menyertai Rujukan dalam fungsi. Setelah anda selesai, Rujukan luaran hanya akan bertujuan pada objek yang sebenarnya. Sekiranya anda memindahkan objek yang tidak dapat diubah ke fungsi, Rujukan luaran selalu tidak dapat diikat semula, dan anda tidak boleh memutasikan objek tersebut. Untuk menjadikan perkara lebih mudah, mari kita fahami satu persatu.

Lulus Dengan Rujukan

Pertama sekali, anda harus memahami bahawa pemboleh ubah 'mylist' itu sendiri bukan senarai tetapi merujuk kepada senarai yang mempunyai nilai. Anda boleh memanggil pemboleh ubah ‘mylist’ sebagai wadah yang mempunyai nilai di dalamnya. Nilai senarai adalah objek. Pemboleh ubah 'mylist' telah dihantar terus ke fungsi dengan kandungannya.

Kedua-dua senarai & senarai saya nampaknya merupakan pemboleh ubah penyimpanan yang sama dalam contoh kod di bawah dan dengan itu berlaku untuk objek penyimpanan yang sama. Itulah sebabnya pada output, ia mencetak 'Saeed.'

Segala tindakan yang dilakukan pada pemboleh ubah atau entiti akan segera dicerminkan dengan kaedah pemanggil. Kaedah ini sepenuhnya dapat mengubah nilai pemboleh ubah dan mengarahkannya pada objek yang sama sekali berbeza. Seperti yang anda lihat dalam fungsi 'set_list,' kami telah mengubah kandungan senarai dan mencetak senarai baru yang mempunyai elemen 'Aqsa.' Ini kerana kami telah mengembalikan senarai yang diubah dan mencetaknya pada baris yang sama dengan pemanggil.

Kaedah ini juga boleh mengagihkan semula elemen pemboleh ubah untuk hasil yang sama seperti di bawah. Anda dapat melihat kami telah menambahkan nilai baru ke dalam daftar, dan perubahan tersebut telah tercermin. Kami telah menambahkan rentetan unik ke senarai dan mengembalikannya ke pemanggil. Untuk membuat kesimpulan, kaedah dan pemanggil telah menggunakan pemboleh ubah dan objek yang sama sepanjang hubungan pasif.

Lulus dengan Nilai

Melalui nilai demi nilai, kaedah ini dibekalkan dengan pendua objek argumen yang diberikan oleh pemanggil kepadanya. Ini memastikan bahawa item asal tidak berubah dan semua modifikasi yang dibuat disimpan di lokasi memori yang berasingan dalam replika objek yang sama.

Ia sama berlaku dengan operasi yang dijalankan pada pemboleh ubah atau entiti dengan kaedah tersebut. Pendua pemboleh ubah & objek dalam skop kaedah pemanggil sepenuhnya dipisahkan untuk meringkaskannya.

Lulus Objek dengan Rujukan

Sepanjang keadaan ini, kerana Python berbeza, kaedah Python memperoleh rujukan objek yang sangat serupa dalam simpanan seperti yang disebut oleh pemanggil. Sebaliknya, teknik ini tidak memperoleh pemboleh ubah ‘mylist’ (bekas). Kaedah pemanggil menyimpan objek yang sama; kaedah menghasilkan wadah seseorang dan menghasilkan indeks sama sekali segar untuknya sendiri, sama seperti dalam nilai lulus.

Pemanggil dan kaedah berbicara mengenai objek yang sama di tempat penyimpanan, tetapi apabila kaedah yang dilampirkan menggunakan item luaran ke dalam daftar, entiti pemanggil diubah. Mereka mempunyai banyak label, tetapi semuanya sama. Kedua-dua pemboleh ubah memegang objek yang sangat serupa. Itulah rasa di sebalik kaitannya dengan bergerak oleh objek. Dalam simpanan, kaedah dan pemanggil menggunakan objek yang serupa namun menangkapnya melalui pelbagai pemboleh ubah. Pemboleh ubah pemanggil (kontena) tidak akan diubah oleh pengubahsuaian yang dilakukan pada pemboleh ubah kaedah (kontena); hanya data atau kandungan yang diubahsuai.

Kesimpulannya

Python beroperasi secara bebas dari bahasa yang menerima pergerakan oleh Referensi atau nilai argumen. Argumen kaedah adalah pemboleh ubah tempatan yang telah diperuntukkan untuk setiap nilai yang dipindahkan ke kaedah. Tetapi itu masih tidak menghalangi anda memperoleh hasil yang sama seperti yang anda dapati dalam bahasa lain sambil mengalihkan hujah dengan proksi.