ホームページ >バックエンド開発 >Python チュートリアル >`str` を再定義すると、後続の Python 関数呼び出しで `TypeError` が発生するのはなぜですか?
str を再定義すると 2 回目の実行で TypeError が発生する
提供された Python コードは特異な動作を示し、example(1) の呼び出しは問題なく実行されます。ただし、example(2) は TypeError をトリガーします。この不可解な現象は、問題のあるコード シーケンスに起因しています:
global str str = str(parameter)
このブロック内で、コードは値 str(parameter) をグローバル str 変数に割り当てます。この再定義は基本的に文字列型の組み込み Python 名をオーバーライドするため、後続の操作と競合が発生します。
問題
組み込みの str() 関数は次のとおりです。オブジェクトを文字列に変換するために使用されます。 str を str(parameter) で再定義することで、コードは元の関数を、parameter の変換された値を保持するカスタム変数に効果的に置き換えます。
その結果、example(2) の 2 回目の呼び出しで、コードがstr を再度使用しようとすると、それは関数ではなくなり、代わりに文字列オブジェクトになります。その結果、文字列オブジェクトは関数のように呼び出すことができないため、インタプリタは TypeError を発生させます。
解決策
この問題を修正するには、組み込み str 名の変更を控えてください。 。代わりに、変換された値を格納するローカル変数に別の名前を割り当てます。さらに、グローバル ステートメントを削除します。ローカル変数は既存のグローバル変数を変更しないため、これは不要です。
修正されたコードは次のとおりです。
def example(parameter): s = str(parameter) # Use a different name for the local variable print(s) # Use the newly created local variable example(1) example(2)
以上が`str` を再定義すると、後続の Python 関数呼び出しで `TypeError` が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。