ホームページ > バックエンド開発 > Python チュートリアル > なぜ「example = list(...)」は「TypeError: 'list' object is not callable」を引き起こすのでしょうか?

なぜ「example = list(...)」は「TypeError: 'list' object is not callable」を引き起こすのでしょうか?

Linda Hamilton
リリース: 2024-12-30 16:29:09
オリジナル
621 人が閲覧しました

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

「example = list(...)」は「TypeError: 'list' object is not callable」という結果になるのはなぜですか?

REPL では、次の例を使用して変数にリストを割り当てようとすると、「TypeError: 'list' object is not callable」というエラーが発生する可能性があります。 code:

example = list('easyhoss')
ログイン後にコピー

この問題は、クラスを参照する Python 組み込み名リストが、同じ名前の変数を作成することによってシャドウされているために発生します。この変数は、リスト クラスのインスタンスを指します。

このシャドウイングを説明するには、次のようにします。

>>> 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
ログイン後にコピー

Python は名前空間内の名前でオブジェクト (関数とクラスを含む) を参照するため、任意のオブジェクトを書き換えることができます。任意のスコープ内の名前。ランタイムはローカル名前空間で名前を検索し、見つからない場合は上位レベルの名前空間に進みます。このプロセスは、名前が見つかるか、NameError が発生するまで続きます。

リストなどの組み込みは、上位の名前空間 __builtins__ に存在します。変数リストがモジュールのグローバル名前空間で宣言されている場合、インタープリターは __builtins__ 内で変数リストを検索しません。同様に、変数 var が関数内で作成され、別の var がグローバル名前空間で定義されている場合、関数から var を参照すると、常にローカル変数が参照されます。

例:

>>> 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
ログイン後にコピー

したがって、Python 組み込み関数は他のすべてのオブジェクトと同じルールに従います。この例で示されているシャドウイングは、名前のシャドウイングの問題を強調表示する IDE を使用することで回避できます。

さらに、クラスであるリストは呼び出し可能です。クラスを呼び出すと、インスタンスの構築と初期化がトリガーされます。インスタンスも呼び出し可能ですが、リスト インスタンスは呼び出し可能ではありません。クラスとインスタンスは、Python ドキュメントで説明されている明らかに異なる概念です。

以上がなぜ「example = list(...)」は「TypeError: 'list' object is not callable」を引き起こすのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート