ホームページ >バックエンド開発 >Python チュートリアル >Python で「example = list(...)」によって「TypeError: 'list' Object Is Not Callable」が発生するのはなぜですか?

Python で「example = list(...)」によって「TypeError: 'list' Object Is Not Callable」が発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-08 07:00:15292ブラウズ

Why Does

名前としてのオブジェクト: "example = list(...)" が "TypeError: 'list' Object Is Not Callable" を引き起こす理由

対話型 Python でコード「example = list('easyhoss')」を使用しようとすると、不可解なエラーが発生しますセッション。 「example」がリストになるというチュートリアルの予想に反して、「TypeError: 'list' object is not callable.」という結果になります。

Shadowing: The Puzzle Solver

この問題の根本は、組み込みの「リスト」名のシャドウイングにあります。最初は、「リスト」は組み込みクラスを指します。ただし、「list」に値を割り当てると、リストのインスタンスを参照するその名前の変数が作成されます。

たとえば、次のコードを実行するとします。

example = list('easyhoss')
list = list('abc')
example = list('easyhoss')  # Error: 'list' is now an instance

「リスト」の意味をクラスからインスタンスに効果的に変更します。これにより、Python は「リスト」名を検索するときにインスタンスを優先し、「TypeError」が発生します。

名前空間とスコープ: 中心的な概念

名前空間についてこの問題を解決するには、スコープ設定が重要です。 Python は、名前とそれに対応するオブジェクトを名前空間に編成します。これは本質的には辞書です。

Python は階層的な名前空間構造を持っています。名前にアクセスするとき、Python は最初にローカルの名前空間をチェックします。名前が見つからない場合は、次に上位の名前空間に進み、すべての名前空間を使い果たし、NameError がスローされるまで続行します。組み込み関数とクラスは、最上位の名前空間 __builtins__ に存在します。

シャドウイングと解決: 例

次のコードを考えてみましょう:

example = list("abc")  # Works fine
list = list("abc")
example = list("abc")  # TypeError

「list」に値を割り当てた後、Python はローカル名前空間で「list」を検索します。そこでインスタンスが見つかるため、上位レベルの名前空間に進むことができず、エラーが発生します。

落とし穴の回避: ベスト プラクティス

シャドウイングを回避するには適切な機能を確保するには、名前のシャドウイングを強調表示する IDE を使用することをお勧めします。さらに、組み込み名の再割り当ては避けてください。組み込み名はプログラム全体で共有され、アクセスできるように意図されているためです。

さらなる調査: クラス、インスタンス、および呼び出し可能

Ifクラス、インスタンス、呼び出し可能オブジェクトについてさらに詳しく知りたい場合は、ドキュメントの包括的な説明を参照してください。

以上がPython で「example = list(...)」によって「TypeError: 'list' Object Is Not Callable」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。