ループ内のPython変数

ヴェイル

私はこのような単純なコードを持っています:

def function():
    ciao = stuff + stuff2
    return ciao

def megaf():
    stuff = 1
    stuff2 = 3
    for t in range(10):
        stuff += 1
        stuff2 += 2
        print function()

megaf()

コードを実行したときに発生するエラーは

NameError:グローバル名 'stuff'が定義されていません

変数を定義したので、理由がわかりません。

変数stuffstuff2関数の外部の両方を定義しようとしましたが、「UnboundLocalError:ローカル変数 'スタッフ'が割り当て前に参照されました」というエラーが表示されます。私は実際に問題が何であるかを理解することができないので、これの解決策を見つけることさえできません。

スカイキング

Pythonでは、変数にはローカルとグローバルの2つのフレーバーがあります。ローカル変数は関数内からのみ見ることができ(そしてそれらは関数を呼び出すたびに異なります)、グローバル変数はどこからでも見ることができます(そして永続的です)。

また、同じ名前のグローバル変数とローカル変数を持つことも可能です。関数内にローカル変数がある場合、それは名前が参照するローカル変数です。

関数内の変数がローカルかグローバルかを判断するには、その使用方法を確認する必要があります。基本的に、次の場合を除いて、ローカルであると見なされます。

  • globalステートメントを使用してグローバルであると宣言されています
  • に割り当てられていません。

最初の試行では、最初に割り当ててstuffローカルと見なします(グローバルであると宣言しなかったため)。したがって、外部からそれらにアクセスすることはできませんstuff2megafmegaf

あなたの内外に割り当てることによってこれを修正しようとするstuff作成時にそれらに割り当てられ、にローカルになります。用途ローカル変数を参照していますが、あなたがそれらを使用する前に、ローカル変数に割り当てていないとして(ノート外の割り当てへの異なっているグローバル変数にあります)。stuff2megafmegafstuffstuff2megafstuffstuff2stuffstuff2

2つの回避策があります。まず、汚いのは、単にグローバルであると宣言することです。

def function():
    ciao = stuff + stuff2
    return ciao

def megaf():
    global stuff, stuff2

    stuff = 1
    stuff2 = 3
    for t in range(10):
        stuff += 1
        stuff2 += 2
        print function()

グローバル変数を使用することは悪い習慣と見なされることが多いため、これは汚いです。他の解決策はfunction、他の回答で述べられいるように、それらをパラメーターとしてに渡すことです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事