Semasa menulis kelas untuk ujian, anda telah perasan bahawa parameter dalam Python nampaknya diluluskan oleh nilai dan bukannya rujukan. Artikel ini akan menjelaskan sama ada andaian anda adalah betul dan membimbing anda dalam melaksanakan rujukan lulus dalam Python.
Dalam Python, hujah diluluskan melalui rujukan , yang bermaksud bahawa rujukan kepada objek dihantar ke fungsi. Walau bagaimanapun, rujukan ini diluluskan oleh nilai. Tingkah laku ini timbul disebabkan oleh pembezaan antara jenis data boleh ubah dan tidak boleh ubah.
Pertimbangkan contoh berikut:
def try_to_change_list_contents(the_list): the_list.append('four') outer_list = ['one', 'two', 'three'] try_to_change_list_contents(outer_list) print(outer_list)
Memandangkan senarai boleh berubah, parameter the_list ialah rujukan kepada objek outer_list. Dengan menambahkan 'empat' pada the_list, outer_list juga diubah suai.
Sebaliknya, pertimbangkan contoh ini dengan rentetan:
def try_to_change_string(my_string): my_string = 'Changed' outer_string = 'Original' try_to_change_string(outer_string) print(outer_string)
Walaupun berubah pembolehubah my_string dalam fungsi, outer_string kekal tidak berubah. Ini berlaku kerana rentetan tidak boleh ubah dan tidak boleh diubah suai di tempatnya.
Untuk meniru rujukan lalu, apabila pembolehubah asal diubah suai, terdapat beberapa pilihan :
1. Mengembalikan Nilai Baharu: Fungsi boleh mengembalikan nilai baharu, yang boleh diberikan kepada pembolehubah asal di luar fungsi.
2. Mengubah suai Atribut Objek: Jika pembolehubah ialah objek, fungsi boleh mengubah suai salah satu atributnya, yang akan dicerminkan dalam objek asal.
3. Menggunakan Senarai atau Pembungkus: Anda boleh membungkus pembolehubah dalam senarai dan menghantar senarai ke fungsi. Mengubah suai senarai akan menjejaskan pembolehubah asal.
Dengan memahami mekanisme nilai lulus dan rujukan, anda boleh mengubah suai pembolehubah dalam Python dengan berkesan seperti yang dikehendaki.
Atas ialah kandungan terperinci Adakah Python Pass-by-Value atau Pass-by-Reference, dan Bagaimana Saya Boleh Mencapai Gelagat Pass-by-Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!