Mentakrifkan semula str Menyebabkan Ralat Jenis dalam Pelaksanaan Kedua
Kod Python yang disediakan mempamerkan tingkah laku yang pelik, di mana panggilan ke contoh(1) dilaksanakan tanpa masalah , tetapi contoh(2) mencetuskan TypeError. Fenomena yang membingungkan ini berpunca daripada urutan kod yang bermasalah:
global str str = str(parameter)
Dalam blok ini, kod memberikan nilai str(parameter) kepada pembolehubah str global. Takrifan semula ini pada asasnya mengatasi nama Python terbina dalam jenis rentetan, menyebabkan konflik dengan operasi seterusnya.
Masalahnya
Fungsi str() terbina dalam ialah digunakan untuk menukar objek kepada rentetan. Dengan mentakrifkan semula str dengan str(parameter), kod secara berkesan menggantikan fungsi asal dengan pembolehubah tersuai yang memegang nilai parameter yang ditukar.
Akibatnya, dalam panggilan kedua ke contoh(2), apabila kod cuba menggunakan str sekali lagi, ia bukan lagi fungsi tetapi sebaliknya objek rentetan. Akibatnya, jurubahasa menimbulkan TypeError kerana objek rentetan tidak boleh dipanggil seperti fungsi.
Penyelesaian
Untuk membetulkan isu ini, elakkan daripada mengubah suai nama str terbina dalam . Sebaliknya, tetapkan nama yang berbeza kepada pembolehubah tempatan yang menyimpan nilai yang ditukar. Selain itu, alih keluar pernyataan global, yang tidak diperlukan kerana pembolehubah tempatan tidak mengubah suai mana-mana pembolehubah global sedia ada.
Berikut ialah kod yang diperbetulkan:
def example(parameter): s = str(parameter) # Use a different name for the local variable print(s) # Use the newly created local variable example(1) example(2)
Atas ialah kandungan terperinci Mengapa Mentakrifkan Semula `str` Menyebabkan `TypeError` dalam Panggilan Fungsi Python Seterusnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!