検索
ホームページバックエンド開発Python チュートリアルPYTHONでGLOBALを使用することで発生する一連の問題

何が問題だったのでしょうか

Python では、global を使用すると、この関数でグローバル変数を使用できるようになります。同時に、関数内の変数へのアクセスは、最初はローカルで、次にグローバルになります。

入れ子関数でglobalを使うと不合理な動作が発生します。

アップコード:

リーリー

関数x()ではglobalは使わず、この時のbはlocalを使います。したがって、print はローカル b を印刷します

なぜ12と印刷されているのでしょうか?そして、In[101] の b が 2 であることをどう説明しますか?

Y()、使用したグローバルは x() の b = 12 をインポートしませんでした。

関数y()では、global a,bという文でaとbをglobalに展開しているので、最上位レベルではb(In[98])がなくてもb(In[101])が生成されます。

つまり、グローバルa,bは、aとbを最も外側の変数とみなします。

もう一度試してください:

リーリー

エラーが報告されました! y() global b の後に代入がない場合、最上位には b は存在しません。これは、global が名前を導入するだけで、代入などの操作を実行しないことを示しています。

Global は変数が存在するかどうかを気にせず、名前のみをインポートし、名前に対する操作は「トップレベルの名前空間」に反映されます。

また来てください:

リーリー

これは、内層 y() のグローバルが x() のものをインポートしないことを確認します。

それでは、内部関数は外部関数の正しい変数をどのように使用するのでしょうか?

内部関数パラメータの受け渡しの問題を解決する

1.

まず、値を取得するだけなら何も加工する必要はありません。

リーリー

y()では、aに値を代入すると、aはすぐに内部変数になります。

リーリー

関数 y() のどこかで a に値が代入されると、Python は代入前に a が存在しないものとみなします。

同時に、python2のprintでは1つずつ出力することが分かりました。これを踏まえてpython3で再度試してみたところ、一緒に出力されることが分かりました。しかし、これはこの記事の焦点では​​ないので、折りたたむことにします。

リーリー

同時に、Python コードは単に行ごとに実行されるのではなく、実行前にスキャンされることがわかりました。

同時に、NameErrorではなくUnboundLocalErrorが返されることも判明しました。公式の概念である「unbound」に注意してください。 「unbound」を使用して説明すると、次のようになります。グローバルは、トップレベルの変数名をローカル変数名にバインドし、同時に変更します。これは「参照」です。Python は a = 1 を検出すると、a が であることを認識します。ローカルであるため、a が「オブジェクトを指す」場合 (Python 変数はすべて参照であるため)、以前は a を呼び出すことは不正な動作でしたが、この動作は NameError とは異なり、アンバインド ローカルとして定義されています。

二、

list、dictなどの変数を使う

リーリー

エラーは報告されておらず、完璧です!

ステートメント l[:] = ["out msg"] に注意し、スライス割り当てを使用します。それ以外の場合は、

リーリー

コードの 6 行目で l に新しいリストが割り当てられるため、UnboundLocalError が再び発生します。

三、

パラメータの受け渡しを使用します。

リーリー

デフォルトパラメータにリストなどの変数オブジェクトを置かないように注意してください。

上記は、編集者が紹介した PYTHON での GLOBAL の使用によって引き起こされる一連の問題です。ご質問があれば、メッセージを残してください。編集者がすぐに返信します。 。また、スクリプト ハウスの Web サイトをサポートしていただきありがとうございます。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonでタプルの理解が可能ですか?はいの場合、どうしてそうでない場合は?Pythonでタプルの理解が可能ですか?はいの場合、どうしてそうでない場合は?Apr 28, 2025 pm 04:34 PM

記事では、構文のあいまいさのためにPythonにおけるタプル理解の不可能性について説明します。 Tupple式を使用してTuple()を使用するなどの代替は、Tuppleを効率的に作成するためにお勧めします。(159文字)

Pythonのモジュールとパッケージとは何ですか?Pythonのモジュールとパッケージとは何ですか?Apr 28, 2025 pm 04:33 PM

この記事では、Pythonのモジュールとパッケージ、その違い、および使用について説明しています。モジュールは単一のファイルであり、パッケージは__init__.pyファイルを備えたディレクトリであり、関連するモジュールを階層的に整理します。

PythonのDocstringとは何ですか?PythonのDocstringとは何ですか?Apr 28, 2025 pm 04:30 PM

記事では、PythonのDocstrings、それらの使用、および利点について説明します。主な問題:コードのドキュメントとアクセシビリティに関するドキュストリングの重要性。

ラムダの機能とは何ですか?ラムダの機能とは何ですか?Apr 28, 2025 pm 04:28 PM

記事では、ラムダの機能、通常の機能との違い、およびプログラミングシナリオでの有用性について説明します。すべての言語がそれらをサポートするわけではありません。

Pythonで休憩、続行、パスとは何ですか?Pythonで休憩、続行、パスとは何ですか?Apr 28, 2025 pm 04:26 PM

記事では、PythonでのBreak、継続、およびパスについて説明し、ループの実行とプログラムの流れの制御における役割について説明します。

Pythonのパスとは何ですか?Pythonのパスとは何ですか?Apr 28, 2025 pm 04:25 PM

この記事では、機能やクラスなどのコード構造のプレースホルダーとして使用されるヌル操作であるPythonの「パス」ステートメントについて説明し、構文エラーなしで将来の実装を可能にします。

Pythonの引数として関数を渡すことはできますか?Pythonの引数として関数を渡すことはできますか?Apr 28, 2025 pm 04:23 PM

記事では、パス機能をPythonの引数として説明し、モジュール性やソートやデコレーターなどのユースケースなどの利点を強調しています。

Pythonの /と//の違いは何ですか?Pythonの /と//の違いは何ですか?Apr 28, 2025 pm 04:21 PM

記事は、Pythonの /および//オペレーターについて説明します: /真の分割の場合、//床部門の場合。主な問題は、それらの違いとユースケースを理解することです。CharacterCount:158

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。