REPL で、サンプル変数が文字列の文字のリストを保持することを期待してコード「example = list('easyhoss')」を試行すると、「TypeError:」というエラーが発生しました。 'list' オブジェクトは呼び出し可能ではありません。
これは、組み込み Python クラス "list" をリストのインスタンスで誤って上書きしたために発生します。後ほど「example = list('easyhoss')」で「list」を参照すると、Python はそれをインスタンスとして解釈しましたが、呼び出すことはできません。
これを理解するには、Python の名前空間とスコープ メカニズムを調べる必要があります。
名前空間: Python は、ネストされた名前空間を使用してオブジェクト名 (クラスや関数を含む) を保存します。各モジュールには、組み込み関数やクラスを含む独自の名前空間があります。
スコープ: 名前を参照するとき、Python は最初にローカル名前空間をチェックします。見つからない場合は、名前が見つかるか、それ以上の名前空間が見つからなくなるまで (結果として NameError が発生する)、上位レベルの名前空間に移動します。
あなたの場合、無意識のうちに "list" のインスタンスをグローバル "list" 変数:
example = list('easyhoss') # "list" refers to the built-in class list = list('abc') # Creates a "list" variable referencing an instance of "list" example = list('easyhoss') # "list" refers to the instance, resulting in the error
この上書きにより、組み込みの "list" クラスが非表示になり、 "TypeError."
このエラーを回避するには、名前のシャドウイングを強調表示する Python プラグインを備えた PyCharm や Atom などの IDE を使用します。
追加の考慮事項:
対話型 Python セッションを起動すると、独自の名前空間を持つ一時モジュールが作成されます。これは、名前空間の動作にも影響を与える可能性があります。
以上が「example = list(...)」が時々「TypeError: 'list' object is not callable」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。