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 サイトの他の関連記事を参照してください。