Dalam REPL, anda mungkin menghadapi ralat ""TypeError: 'list' object is not callable"" apabila cuba memberikan senarai kepada contoh pembolehubah menggunakan yang berikut kod:
example = list('easyhoss')
Isu ini timbul kerana senarai nama terbina dalam Python, yang merujuk kepada kelas, telah dibayangi dengan mencipta pembolehubah dengan nama yang sama. Pemboleh ubah ini menunjukkan contoh kelas senarai.
Untuk menggambarkan pembayang ini:
>>> example = list('easyhoss') # 'list' refers to the builtin class >>> list = list('abc') # Create a variable 'list' referencing an instance of 'list' >>> example = list('easyhoss') # 'list' now refers to the instance Traceback (most recent call last): File "<string>", line 1, in <module> TypeError: 'list' object is not callable
Memandangkan Python merujuk objek (fungsi dan kelas disertakan) dengan nama dalam ruang nama, anda boleh menulis semula mana-mana nama dalam mana-mana skop. Masa jalan mencari nama dalam ruang nama tempatan dan, jika ia tidak dijumpai, meneruskan ke ruang nama peringkat lebih tinggi. Proses ini berterusan sehingga nama ditemui atau NameError dinaikkan.
Builtins, seperti senarai, berada dalam ruang nama tertib tinggi __builtins__. Jika senarai pembolehubah diisytiharkan dalam ruang nama global modul, penterjemah tidak akan mencarinya dalam __builtins__. Begitu juga, jika pembolehubah var dicipta dalam fungsi, dan var lain ditakrifkan dalam ruang nama global, merujuk var daripada fungsi akan sentiasa merujuk kepada pembolehubah tempatan.
Sebagai contoh:
>>> example = list("abc") # Works fine >>> >>> # Creating variable "list" in the global namespace of the module >>> list = list("abc") >>> >>> example = list("abc") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'list' object is not callable >>> # Python finds "list" in the global namespace, >>> # but it is not the desired "list". >>> >>> # Remove "list" from the global namespace >>> del list >>> # Since "list" is no longer in the global namespace, >>> # Python searches in a higher-level namespace. >>> example = list("abc") # Works now
Oleh itu, Python builtin mengikut peraturan yang sama seperti semua objek lain. Pembayangan, yang digambarkan dalam kes ini, boleh dielakkan dengan menggunakan IDE yang menyerlahkan isu pembayang nama.
Selain itu, senarai sebagai kelas boleh dipanggil. Memanggil kelas mencetuskan pembinaan dan permulaan contoh. Walaupun contoh juga boleh dipanggil, contoh senarai tidak. Kelas dan kejadian adalah konsep yang jelas berbeza yang dijelaskan dalam dokumentasi Python.
Atas ialah kandungan terperinci Mengapakah `example = list(...)` menimbulkan `TypeError: 'list' object is not callable`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!