1

私はPythonの初心者です。練習用に以下のようなコードを書いてみました。

i=1
def wrte():
 global i
 while i<5:
     print "%s .Line..\n" %i
     i+=1

def appnd():
  j=i
  while i in range(i,j+3):
     print "%s .Line..\n" %i
     i+=1

def Main():
   wrte()
   appnd()

Main()

出力は以下のようになります

  1 .Line..

    2 .Line..

    3 .Line..

    4 .Line..

**Traceback (most recent call last):
  Line 18, in <module>
    Main()
  Line 16, in Main
    appnd()
  Line 9, in appnd
    j=i
UnboundLocalError: local variable 'i' referenced before assignment**

期待される結果:: 次のシーケンスは次のように追加する必要があります

5. Line..
6. Line..
7. Line..

これについて私を助けてください..

4

6 に答える 6

3

globalその変数を使用する各関数で定義が必要です。

def appnd():
   global i

注: 可能であれば、グローバル変数と関連する関数をクラスに移動します。

于 2012-04-17T09:06:37.370 に答える
1

いつグローバルを使用すべきか知っていると思います。そうしないと、書き込み関数に含まれません。変数を読み取るだけの場合は省略できます。これは、append関数で必要だと思いますが、i + = 1が含まれているため、変更します。追加を変更するだけです。

for line in range(i, i + 3):
    print "%s .Line..\n" % line
于 2012-04-17T09:18:08.877 に答える
1

次の定義が機能します。

def appnd():
  j=i
  while i in range(i,j+3):
     print "%s .Line..\n" %i

# it would print infinitely, but will work

コンパイル時に、Python は変数が関数内でどのように使用されているかを調べて、それらを探すスコープを定義します。あなたの定義でappndは、 assign foriが表示されているため、ローカル変数として脅威を与えようとしています。私のコードには割り当てがないため、Python は単純にi親スコープから値を取得します。この場合i、ローカルでもグローバルでもなく、free variableと呼ばれます。 実行モデル - スコープとバインディング- 読むことを強くお勧めします。

于 2012-04-17T09:16:27.887 に答える
0

追加

global i

j=i

問題を解決する必要があります

于 2012-04-17T09:07:37.393 に答える
0

定義のスコープはローカルです。関数内で変数をグローバルとして宣言しても、それがすべての関数に適用されるわけではありません。appnd() 関数でも i をグローバルとして宣言する必要があります。そうは言っても、それはあなたのスタイルが正しいという意味ではありません。変数を関数に渡すほうがよいでしょう。

于 2012-04-17T09:13:22.497 に答える
0

appnd関数では、グローバル変数iを作成する必要があります。

i=1
def wrte():
 global i
 while i<5:
     print "%s .Line..\n" %i
     i+=1

def appnd():
    global i
    j=i
    while i in range(i,j+3):
        print "%s .Line..\n" %i
        i+=1

def Main():
   wrte()
   appnd()

Main()
于 2019-01-25T09:48:46.390 に答える