導入
Python関数における変数の名前空間、スコープ、および動作を理解することは、効率的に記述し、ランタイムエラーや例外を回避するために重要です。この記事では、名前空間やPython変数スコープのさまざまな側面を掘り下げ、Pythonがローカル、グローバル、および囲みの変数を詳細に管理する方法を学びます。
Python関数について詳細に説明しましたが、これは先にあります。 Pythonは抽象化の原則を使用して複雑なロジックを非表示にし、必要な出力のみを公開しますが、分解はモジュラー、読み取り可能、および再利用可能な機能を作成します。
これらの原則は、Pythonが関数定義とネストされた関数の変数スコープをどのように処理するかを理解するのに十分なほど明白であり、詳細な例を介して探求します。この記事の終わりまでに、これらの概念とプログラムに効果的に適用する方法を明確に理解する必要があります。
概要
- Pythonの名前空間と可変スコープは、効率的なコーディングとエラー防止に不可欠です。
- この記事では、Pythonでのローカル、グローバル、および囲まれた変数の動作を調査します。
- LEGBルールは、異なるスコープにわたるPythonの変数名検索について説明します。
- 実用的な例は、グローバルおよびローカルの可変の使用と変更を示しています。
- ネストされた関数と囲まれたスコープがカバーされており、非ローカルキーワードを強調します。
目次
- Pythonの変数は何ですか?
- グローバル変数
- ローカル変数
- 名前空間は何ですか?
- Pythonの可変スコープは何ですか?
- legbルールとは何ですか?
- Python変数スコープワークはどのようになりますか?
- 1.ローカル範囲でグローバル変数を使用します
- 2.ローカル範囲でローカル変数を使用します
- 3.ローカルスコープ内のグローバル変数の変更
- 4.宣言を使用してローカルスコープ内でグローバル変数を修正します
- 5。関数を使用して、グローバル可変インシンサイドローカルスコープを変更します
- ネストされた機能は何ですか?
- 変数の包囲範囲は何ですか?
- 7.宣言なしで範囲内の封筒内のグローバル変数を修正します
- 8。宣言を使用してローカルスコープ内でネストされた変数を変更します
- よくある質問
Pythonの変数は何ですか?
Pythonの変数は、データまたは値(int、float、str、boolなどなど)を保存するコンテナです。変数が保存され、将来の使用のためにアクセス可能なメモリ位置は、変数のthescopeと呼ばれます。
Pythonには2種類の変数があります。
グローバル変数
- これらの変数は、メインプログラムの範囲の下にあります。
- メインプログラムは、関数でのみ利用可能であるため、ローカル変数を使用できません。
ローカル変数
- これらの変数は、関数の範囲の下にあります。
- また、ローカル変数は、ローカル変数がローカルスコープ内で定義されていない場合、関数内のグローバル変数を使用できます。
また、Pythonの可変性と不変のオブジェクトも読みます
名前空間は何ですか?
Python Namepaceは、識別子(一般に変数名と呼ばれる)をキーとして、およびそれぞれのオブジェクトをメモリ空間内の値として保持するAspaceまたは辞書です。 Pythonプログラミング言語には、4種類の名前空間があります。
- 組み込みの名前空間
- グローバルネームスペース
- 名前空間を囲む
- ローカルネームスペース
この概念をよりよく理解するために、すぐにさまざまな例を見てみましょう。しかし、その前に、上記の可変スコープを理解することが本当に重要です。
Pythonの可変スコープは何ですか?
Pythonでは、スコープとは、変数が直接アクセス可能なプログラムの領域またはテキスト領域を指します。実行中はいつでも、次のものがあります。
- ローカルスコープ:これは、関数内で定義される最も内側の範囲です。この範囲では、Pythonはローカル変数を探します。
- 囲まれた範囲:これらは、ネストされた関数のスコープです。これらには、ローカルでもグローバルでもない非ローカル変数が含まれています。
- グローバルスコープ:このスコープには、モジュールレベルで定義された変数が含まれており、モジュール全体でアクセスできます。
注:プログラムでこれらのユーザー定義のスコープを作成して、効率的に実行します。ただし、Pythonの組み込み変数には、組み込みスコープと呼ばれるスコープもあります。
- 組み込み範囲:これは、より良いコードを作成するためにPythonが提供するすべての事前定義されたキーワードまたはメソッドの範囲です。したがって、これらはPythonインタープリターが起動するとすぐに利用できます。また、これらのスコープは削除されることはなく、モジュール全体でアクセス可能であることに注意してください。
legbルールとは何ですか?
これで、名前空間と可変範囲についての基本的な理解ができます。 ScopingルールがPythonプログラミング言語でどのように適用されるかを理解するために、より深く潜りましょう。一般的な略語、legbルールがあります。これは、ローカル、囲み、グローバル、およびビルトインを導入します。
LEGBルールは、インタープリターが内側から識別子を検索できることを示しています。つまり、最初にローカルスコープで変数名または名前空間を探すことから始まります。名前空間が存在しない場合、プログラムの囲い範囲に向かって移動します。 ext、グローバルスコープをチェックして名前空間を見つけます。最後に、識別子がまだ見つからない場合、通訳者はPythonが提供する内蔵スコープを調べます。
さらに、インタープリターがこれらの場所のいずれにも名前を見つけられない場合、Pythonはa ` nameerror`例外を提起します。つまり、変数はプログラムで定義されていません。
また、現在の範囲からlegbルールの階層を上に移動する必要があることを覚えておくことは本当に重要です。
また読む:Advanced Pythonプログラミングの包括的なガイド
Python変数スコープワークはどのようになりますか?
それでは、これらすべての例を1つずつ進めて、これらすべての概念を深く理解しましょう。
1.ローカル範囲でグローバル変数を使用します
これを理解するために、例を挙げてみましょう。ここでは、関数 ` g(y) `がグローバル変数 ` x`を印刷するだけでなく、 ` x 1`として変更します。
次に、 `x`が ` g(y)`内で定義されていないため、pythonはグローバル変数 ` x`の値を取得します。
def g(y): 印刷(x) 印刷(x 1) #xはローカルスコープにないため、グローバル変数からxの値を取得します x = 1 g(x)#ローカル変数内のグローバル print(x)#グローバル変数
出力
1<br><br> 2<br><br> 1
出力は、グローバル変数「 x 」が変化しないことを確認する`x`と ` x 1`の値を示していますが、結果を適切に出力するためにローカル範囲で使用されています。
2.ローカル範囲でローカル変数を使用します
次に、この例を見てください。ここでは、関数定義 ` g(y) `と内部に与えられた関数 ` g`の下にあります。名前 ` x`はローカル変数として定義され、変更されます。
def g(y): x = 10#ローカル変数 x = 1 印刷(x) x = 1#グローバル変数 g(x) 印刷(x)
出力
11<br><br> 1
証拠として、グローバル「 x 」は変更されておらず、ローカル変数はローカルスコープ変数を使用して、予想どおり、関数を介した出力として11を表示し、1出力をグローバルスコープで表示するステートメントを印刷しました。
また、読む:Pythonビルトインデータ構造の包括的なガイド
3.ローカルスコープ内のグローバル変数の変更
しかし、グローバル変数を「グローバル」と宣言することなく変更することは可能ですか?
答えはノーです!ローカルスコープからグローバル変数値を変更することはできません。これにより、エラーが発生するためです。
def h(y): #関数は、グローバル変数を使用できます。 x = 10#ただし、ローカル変数内のグローバル値を変更することはできません x = 1 h(x) 印刷(x)
出力
UnboundLocalerror Traceback(最新のコールLast)<br><br> <ipython-input-3-130c677cc9ab> in <cell line>()<br><br> 3<br><br> 4 x = 1<br><br> ----> 5 h(x)<br><br> 6プリント(x)<br><br> <ipython-input-3-130c677cc9ab> in h(y)<br><br> 1DEF H(Y):<br><br> ----> 2 x = 10<br><br> 3<br><br> 4 x = 1<br><br> 5時間(x)</ipython-input-3-130c677cc9ab></cell></ipython-input-3-130c677cc9ab>
unboundlocalerror:割り当ての前に参照されているローカル変数`x '
これにより、Pythonは割り当て操作のためにローカル変数として扱いますが、ローカルで初期化されていないため、「 boundlocalerror 」になります。また、ローカル変数はグローバル変数にアクセスできますが、グローバル変数に変更を加えることはできません(読み取りでしか読めません)。
また、初心者向けのPythonプログラミングの基礎
4.宣言を使用してローカルスコープ内でグローバル変数を変更します
しかし、Pythonは実際には甘い言語であり、グローバル変数で変更や変更を行うことをお勧めしないにもかかわらず、私はいつもあなたに言ってきたので。それは、「x」を同じキーワードを使用して「x」を「グローバル」と宣言することで、この機能がグローバル変数 `x`を変更できるため、Pythonがこの機能を提供しないという意味ではありません。
def h(y): グローバルX#これでローカル変数内のグローバル値を変更できます #しかし、それはコーディングの良い方法ではありません。このグローバルなキーワードの使用を減らすことに集中する必要があります x = 10 x = 1 h(x) 印刷(x)
出力
11
出力は、 「x 」がグローバルに更新されていることを確認しています。ただし、メイン関数を変更すると他の機能にも影響するため、変更はプログラム全体に影響を与えるため、変更はプログラム全体に影響を与えることを忘れないでください。
5。関数を使用して、グローバル可変インシンサイドローカルスコープを変更します
また、関数内のグローバル変数を10 x x ` x`をインクリメントすることで変更することもできます。新しい値を印刷して返すことができます。
注:これは、「グローバル」キーワードなしでは不可能であるため、グローバル変数自体を変更しているという意味ではありません。
def g(x): x = 10 print( "in f(x):x ="、x) x#returningf(x)を返す x = 2 z = g(x) print( "メインプログラムスコープ:z ="、z) print( "メインプログラムスコープ:x ="、x)
出力
f(x):x = 12<br><br>メインプログラムの範囲:z = 12<br><br>メインプログラムの範囲:x = 2
ここでは、グローバル`x`は変わらず、返された値「 z 」は新しい更新値です。
ネストされた機能は何ですか?
別の「 def 」関数内で定義される関数は、ネストされた関数または内部関数と呼ばれます。
以下は、より良い理解を得るためのネストされた機能の例です。
def f(): def g(): print( "内部関数G") g() print( "内部関数f") f()
出力
内部関数g<br><br>内部関数f
注:ネストされた関数 ` g`は、両方の関数からメッセージを印刷する関数内で呼ばれます。 「 g 」はグローバル範囲で定義されていないため、 ` f` f` willsults on erserの外側の呼び出し` g `を呼び出します。
g()#この関数は関数fの外側に定義されていません
出力
TypeError Traceback(最新のコールLast)<br><br> <ipython-input-8-5fd69ddb5074> in <cell line>()<br><br> ----> 1 g()<br><br> typeRror:g()欠落1必要な位置引数: 'x'</cell></ipython-input-8-5fd69ddb5074>
変数の包囲範囲は何ですか?
Pythonは、ネストされた関数内で定義されている名前のみが囲まれた範囲として知られている名前のみに、異なる特別な変数スコープを提供します。 「非ローカル」スコープとしても知られています。範囲を囲むことは、内側またはネストされた関数であるローカル関数がある場合、外部関数の範囲です。
def f(): x = 1 def g(): print( "内部関数G") 印刷(x) g() print( "内部関数f") f()
上記の例に示すように、この変数`x`は囲い範囲内に存在し、ローカルスコープでも使用できます。これが出力です:
出力
内部関数g<br><br> 1<br><br>内部関数f
さて、先に進み、この新しい範囲をよりよく理解しましょう。
7.宣言なしで範囲内の封筒内のグローバル変数を修正します
繰り返しますが、ネストされた関数内のグローバル変数 ` x`を変更することは不可能です。
def g(x): def h(): x = 1 print( 'in h(x):x ='、x) x = x 1 print( 'in g(x):x ='、x) h(x) xを返します x = 3 z = g(x) print( 'メインプログラムスコープ:x ='、x) print( 'メインプログラムスコープ:z ='、z)
出力
g(x):x = 4<br><br> --------------------------------------------------------------------------------------------------------------------------------------------------------<br> TypeError Traceback(最新のコールLast)<br><br> <ipython-input> in <cell line>()<br><br> 9<br><br> 10 x = 3<br><br> ---> 11 z = g(x)<br><br> 12印刷( 'メインプログラムの範囲:x ='、x)<br><br> 13印刷( 'メインプログラムの範囲:z ='、z)<br><br> <ipython-input> in g(x)<br><br> 5 x = x 1<br><br> 6プリント( 'in g(x):x ='、x)<br><br> ----> 7時間(x)<br><br> 8戻るx<br><br> 9<br><br> typeRror:g。<locals> .h()は0の位置引数を取りますが、1が与えられました</locals></ipython-input></cell></ipython-input>
関数 ` h() `は、パラメーターなしで定義されますが、 `h(x)`は引数で呼び出されます。これにより、「typeReror」も得られます。エンコリング変数はグローバル変数にアクセスできますが、グローバル変数の変更を実行することはできません。
8。宣言を使用してローカルスコープ内でネストされた変数を変更します
同様に、「グローバル」キーワードと同様に、Pythonは開発者に「非ローカル」キーワードを提供します。これにより、ネストされた関数「 h 」は、囲み式関数で定義されている変数`x`を変更できます。
def g(x): def h(): 非ローカルx#h()にg(x)からxを使用するようにtell x = 1 print( 'in h(x):x ='、x) x = x 1 print( 'in g(x):x ='、x) h()#引数なしでh()を呼び出します xを返します x = 3 z = g(x) print( 'メインプログラムスコープ:x ='、x) print( 'メインプログラムスコープ:z ='、z)
出力
g(x):x = 4<br><br> h(x):x = 5<br><br>メインプログラムの範囲:x = 3<br><br>メインプログラムの範囲:z = 5
出力は、両方の関数内で行われた変更と、グローバル変数 ` x`が変更されていないことを示しています。
最後に、スコープが定義されている場所に応じて、各スコープはプログラム全体で異なるレベルのアクセスに対応し、コード内の名前空間の寿命が異なることに注意してください。
また読む:データサイエンスをゼロから学ぶための完全なPythonチュートリアル
結論
この記事では、Pythonがローカルおよびグローバル変数とネストされた機能をどのように処理するかを検討しました。名前空間は、Pythonが開発者に提供する辞書であり、そこからPythonメモリの範囲に変数名とその値を見つけることができることを学びました。さらに、スコープは、ローカル、囲み、グローバル、および組み込みの4つのタイプです。
これらは、競合の命名を回避し、どの名前/識別子がプログラムのさまざまな部分全体のオブジェクトを参照するかを追跡するために非常に役立ちます。
また、ローカルスコープからグローバルスコープの変数を変更する場合は、「グローバル」キーワードを使用できます。同様に、「非ローカル」キーワードを使用してスコープを閉じることができます。
- ローカルスコープ:関数内で作成された変数は、その関数内でのみアクセス可能で、関数が返されるときに削除されます。
- 囲まれた範囲または非局所範囲:内部関数にアクセス可能なネストされた関数の外側関数で作成された変数。
- グローバル範囲:「 __main__ 」プログラムで作成された変数は、プログラム全体でアクセス可能で、通訳が終了するまで続きます。
これにより、業界関連のベストプラクティスをフォローし、開発者定義の例外を減らしながら、優れた生産レベルのコードを書くことに関する洞察を得るのに役立つことを願っています。ただし、これはプログラムをより堅牢にするための最初のステップであり、カバーすることにより多くのことがあります。
したがって、次の記事にご期待ください。Pythonプログラミング言語でのファイルのシリアル化と降下について説明します!
よくある質問
Q1。 Pythonの名前空間は何ですか?Ans。 Pythonの名前空間は、プログラム内の名前または識別子を整理および管理します。基本的に、それらは、変数や関数など、オブジェクトにマッピングされた名前を保存するコンテナまたは辞書のように機能します。
Q2。 PythonのLEGBルールは何ですか? Ans。 PythonのLEGBルールは、Pythonインタープリターが名前または一般的に識別子として知られている際に見上げる順序です。ローカル、囲い、グローバル、および組み込みの略です。
1。ローカル:関数内で定義された名前。
2。囲まれている:囲まれた関数(ネストされた関数)のローカル範囲の名前。
3。グローバル:スクリプトまたはモジュールの上位レベルで定義された名前。
組み込み:「印刷」または ` len`など、Pythonで事前に定義されている名前。
Ans。グローバルキーワードを使用すると、関数がグローバルスコープで定義された変数を変更し、変数が操作の外に存在することを可能にします。注:それができるからといって、これを使用する必要があるという意味ではありません。
Q4。グローバル変数の使用を最小限に抑えることをお勧めするのはなぜですか?Ans。グローバル変数の過剰使用は、理解して維持するのが難しいプログラムにつながる可能性があります。また、意図しない変更を引き起こし、デバッグをより困難にする可能性があります。一般に、ローカル変数を使用して、必要に応じてそれらを渡すことをお勧めします。
Q5。ネストされた関数での「非ローカル」キーワードの使用は何ですか?Ans。グローバルキーワードと同様に、Pythonは「非ローカル」キーワードを提供して、囲みの変数を変更します。非ローカルキーワードは、ネストされた関数の囲み込まれた関数で定義された変数を変更し、ネストされた関数の変数スコープを制御する方法を提供します。
以上がPythonネームスペースと可変スコープに関する包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ねえ、忍者をコーディング!その日はどのようなコーディング関連のタスクを計画していますか?このブログにさらに飛び込む前に、コーディング関連のすべての問題について考えてほしいです。 終わり? - &#8217を見てみましょう

食品の準備を強化するAI まだ初期の使用中ですが、AIシステムは食品の準備にますます使用されています。 AI駆動型のロボットは、ハンバーガーの製造、SAの組み立てなど、食品の準備タスクを自動化するためにキッチンで使用されています

導入 Python関数における変数の名前空間、スコープ、および動作を理解することは、効率的に記述し、ランタイムエラーや例外を回避するために重要です。この記事では、さまざまなASPを掘り下げます

導入 鮮やかな絵画や彫刻に囲まれたアートギャラリーを歩くことを想像してください。さて、各ピースに質問をして意味のある答えを得ることができたらどうでしょうか?あなたは尋ねるかもしれません、「あなたはどんな話を言っていますか?

製品のケイデンスを継続して、今月MediaTekは、新しいKompanio UltraやDimenity 9400を含む一連の発表を行いました。これらの製品は、スマートフォン用のチップを含むMediaTekのビジネスのより伝統的な部分を埋めます

#1 GoogleはAgent2Agentを起動しました 物語:月曜日の朝です。 AI駆動のリクルーターとして、あなたはより賢く、難しくありません。携帯電話の会社のダッシュボードにログインします。それはあなたに3つの重要な役割が調達され、吟味され、予定されていることを伝えます

私はあなたがそうであるに違いないと思います。 私たちは皆、精神障害がさまざまな心理学の用語を混ぜ合わせ、しばしば理解できないか完全に無意味であることが多い、さまざまなおしゃべりで構成されていることを知っているようです。 FOを吐き出すために必要なことはすべてです

今週公開された新しい研究によると、2022年に製造されたプラスチックの9.5%のみがリサイクル材料から作られていました。一方、プラスチックは埋め立て地や生態系に積み上げられ続けています。 しかし、助けが近づいています。エンジンのチーム


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール
