Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapakah `example = list(...)` menimbulkan `TypeError: 'list' object is not callable`?

Mengapakah `example = list(...)` menimbulkan `TypeError: 'list' object is not callable`?

Linda Hamilton
Lepaskan: 2024-12-30 16:29:09
asal
616 orang telah melayarinya

Why does `example = list(...)` raise a `TypeError: 'list' object is not callable`?

Mengapakah ""example = list(...)"" menghasilkan ""TypeError: 'list' object is not callable"?"

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')
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan