Python

Lulus dengan Rujukan vs. Nilai di Python

Lulus dengan Rujukan vs. Nilai di Python
Setelah mengetahui Python, anda dapat menemui keadaan di mana fungsinya 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. Python, sayangnya, 'pass-by-object-reference', baik "Pass by Value" atau "Pass by Reference", sering disebut sebagai "Call by Object Reference" dan juga "Call by Sharing"."Adalah berguna untuk melihat lebih dekat konsep itu sendiri dengan membaginya menjadi beberapa segmen semasa anda terjun ke dalam spesifik 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, kita telah menentukan pemboleh ubah 'berhujah ' mempunyai nilai 4. Sepanjang senario ini, pemboleh ubah 'berhujah ' tidak diubah suai pada tempatnya. Python nampaknya menangani argumen yang anda berikan dan bukannya merujuk kepada pemboleh ubah yang ada sebagai nilai yang serba lengkap.

Adakah ini bermaksud bahawa bukannya dengan Rujukan, Python menggerakkan 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 tidak dapat diubah, 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 tersebut. Setelah anda selesai, Rujukan luaran hanya akan bertujuan pada objek yang sebenarnya. Sekiranya anda memindahkan objek yang tidak berubah ke fungsi, Rujukan luaran selalu tidak dapat diikat semula, dan anda tidak boleh mengubah objek. 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 isi senarai dan mencetak senarai baru dengan 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 perubahannya 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 tetap tidak berubah dan semua modifikasi yang dibuat disimpan di lokasi memori yang berasingan dalam replika objek yang sama.

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

Lulus Objek dengan Rujukan

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

Pemanggil dan kaedah berbicara mengenai objek yang sama di tempat penyimpanan, tetapi apabila kaedah yang dilampirkan menerapkan item luaran ke dalam daftar, entiti pemanggil diubah. Mereka mempunyai banyak label, tetapi ia 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.

Cara Memasang dan Memainkan Doom di Linux
Pengenalan Doom Seri Doom berasal dari tahun 90an selepas pembebasan Doom yang asal. Ini adalah hit seketika dan sejak saat itu dan seterusnya siri pe...
Vulkan untuk Pengguna Linux
Dengan setiap kad grafik generasi baru, kami melihat pembangun permainan mendorong had kesetiaan grafik dan semakin dekat dengan fotorealisme. Tetapi ...
OpenTTD vs Simutrans
Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...