検索
ホームページテクノロジー周辺機器AIPythonネームスペースと可変スコープに関する包括的なガイド

導入

Python関数における変数の名前空間、スコープ、および動作を理解することは、効率的に記述し、ランタイムエラーや例外を回避するために重要です。この記事では、名前空間や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ネームスペースと可変スコープに関する包括的なガイド

さらに、インタープリターがこれらの場所のいずれにも名前を見つけられない場合、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つのタイプです。

これらは、競合の命名を回避し、どの名前/識別子がプログラムのさまざまな部分全体のオブジェクトを参照するかを追跡するために非常に役立ちます。

また、ローカルスコープからグローバルスコープの変数を変更する場合は、「グローバル」キーワードを使用できます。同様に、「非ローカル」キーワードを使用してスコープを閉じることができます。

  1. ローカルスコープ:関数内で作成された変数は、その関数内でのみアクセス可能で、関数が返されるときに削除されます。
  2. 囲まれた範囲または非局所範囲:内部関数にアクセス可能なネストされた関数の外側関数で作成された変数。
  3. グローバル範囲:「 __main__ 」プログラムで作成された変数は、プログラム全体でアクセス可能で、通訳が終了するまで続きます。

これにより、業界関連のベストプラクティスをフォローし、開発者定義の例外を減らしながら、優れた生産レベルのコードを書くことに関する洞察を得るのに役立つことを願っています。ただし、これはプログラムをより堅牢にするための最初のステップであり、カバーすることにより多くのことがあります。

したがって、次の記事にご期待ください。Pythonプログラミング言語でのファイルのシリアル化と降下について説明します!

よくある質問

Q1。 Pythonの名前空間は何ですか?

Ans。 Pythonの名前空間は、プログラム内の名前または識別子を整理および管理します。基本的に、それらは、変数や関数など、オブジェクトにマッピングされた名前を保存するコンテナまたは辞書のように機能します。

Q2。 PythonのLEGBルールは何ですか?

Ans。 PythonのLEGBルールは、Pythonインタープリターが名前または一般的に識別子として知られている際に見上げる順序です。ローカル、囲い、グローバル、および組み込みの略です。
1。ローカル:関数内で定義された名前。
2。囲まれている:囲まれた関数(ネストされた関数)のローカル範囲の名前。
3。グローバル:スクリプトまたはモジュールの上位レベルで定義された名前。
組み込み:「印刷」または ` len`など、Pythonで事前に定義されている名前。

Q3。 Pythonでの「グローバル」キーワードの使用は何ですか?

Ans。グローバルキーワードを使用すると、関数がグローバルスコープで定義された変数を変更し、変数が操作の外に存在することを可能にします。注:それができるからといって、これを使用する必要があるという意味ではありません。

Q4。グローバル変数の使用を最小限に抑えることをお勧めするのはなぜですか?

Ans。グローバル変数の過剰使用は、理解して維持するのが難しいプログラムにつながる可能性があります。また、意図しない変更を引き起こし、デバッグをより困難にする可能性があります。一般に、ローカル変数を使用して、必要に応じてそれらを渡すことをお勧めします。

Q5。ネストされた関数での「非ローカル」キーワードの使用は何ですか?

Ans。グローバルキーワードと同様に、Pythonは「非ローカル」キーワードを提供して、囲みの変数を変更します。非ローカルキーワードは、ネストされた関数の囲み込まれた関数で定義された変数を変更し、ネストされた関数の変数スコープを制御する方法を提供します。

以上がPythonネームスペースと可変スコープに関する包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
緊急オペレーターの音声チャットボット:支援を強化します緊急オペレーターの音声チャットボット:支援を強化しますMay 07, 2025 am 09:48 AM

言語モデルは、世界で急速に進化しています。現在、マルチモーダルLLMSがこの言語モデルの人種の最前線を獲得しているため、これらのマルチモーダルモデルの機能を活用する方法を理解することが重要です

MicrosoftのPHI-4推論モデルは簡単に説明しましたMicrosoftのPHI-4推論モデルは簡単に説明しましたMay 07, 2025 am 09:45 AM

MicrosoftはOpenai、Google、Metaのようなものではありません。特に、大規模な言語モデルに関してはそうではありません。他のハイテク大手は、選択肢でユーザーを圧倒する複数のモデルを起動することを好みます。 Microsoftはいくつかを立ち上げました、

すべての開発者が知っておくべきトップ20のgitコマンド - 分析vidhyaすべての開発者が知っておくべきトップ20のgitコマンド - 分析vidhyaMay 07, 2025 am 09:44 AM

Gitは、キーの動きを学ぶまでパズルのように感じることができます。このガイドには、使用頻度が使用される頻度で注文された上位20個のGITコマンドがあります。各エントリは、クイック「何がするか」の要約から始まり、その後に画像表示が続きます

初心者向けのGitチュートリアル初心者向けのGitチュートリアルMay 07, 2025 am 09:36 AM

ソフトウェア開発では、複数の貢献者の間でコードを管理することで厄介になる可能性があります。同じドキュメントを同時に編集している人を想像してください。それぞれが新しいアイデアを追加したり、バグを修正したり、機能を微調整したりします。構造体なし

楽なフォーマットのためのトップ5 PDFからマークダウンコンバーター - 分析vidhya楽なフォーマットのためのトップ5 PDFからマークダウンコンバーター - 分析vidhyaMay 07, 2025 am 09:21 AM

PPTX、DOCX、PDFなどのさまざまな形式は、Markdown Converterからコンテンツライター、開発者、ドキュメントスペシャリストにとって不可欠なツールです。適切なツールを持つことは、あらゆるタイプを変換するときにすべての違いをもたらします

QWEN3モデル:アクセス方法、機能、アプリケーションなどQWEN3モデル:アクセス方法、機能、アプリケーションなどMay 07, 2025 am 09:18 AM

Qwenは、1つのモデルを次々と黙って追加しています。それぞれのモデルには、非常に大きくてサイズが非常に量子化されているため、無視することは不可能です。 QVQ、QWEN2.5-VL、およびQWEN2.5-OMNIの今年の後、

QWEN3でRAGシステムとAIエージェントを構築する方法QWEN3でRAGシステムとAIエージェントを構築する方法May 07, 2025 am 09:10 AM

Qwenは、最新のファミリーの一部であるQWEN3の一部として8つの新しいモデルをリリースし、有望な機能を紹介しました。フラッグシップモデルであるQWEN3-235B-A22Bは、DeepSeek-R1、OpenaiのO1、O3-Miniなど、他のほとんどのモデルよりも優れていました。

サム・アルトマンなどが現在、AIの最新の進捗のための新しいゲージとしてバイブを使用している理由サム・アルトマンなどが現在、AIの最新の進捗のための新しいゲージとしてバイブを使用している理由May 06, 2025 am 11:12 AM

AIフィールドの評価メトリックとしての「バイブ」の使用の増加について説明しましょう。この分析は、AIの進歩に関する私の進行中のフォーブスコラムの一部であり、AI開発の複雑な側面を調査します(こちらのリンクを参照)。 AI評価のバイブ TRADI

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser

Safe Exam Browser

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、