ホームページ > バックエンド開発 > Python チュートリアル > `str` を再定義すると、後続の Python 関数呼び出しで `TypeError` が発生するのはなぜですか?

`str` を再定義すると、後続の Python 関数呼び出しで `TypeError` が発生するのはなぜですか?

DDD
リリース: 2024-12-18 18:34:17
オリジナル
396 人が閲覧しました

Why Does Redefining `str` Cause a `TypeError` in Subsequent Python Function Calls?

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

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