10

このコードが機能する理由:

var = 0

def func(num):
    print num
    var = 1
    if num != 0:
        func(num-1)

func(10)

しかし、これは「割り当て前に参照されるローカル変数'var'」エラーを出します:

var = 0

def func(num):
    print num
    var = var
    if num != 0:
        func(num-1)

func(10)
4

6 に答える 6

9

最初のコードではローカル変数を作成してvarその値を使用しているのに対し、2番目のコードではローカル変数varを定義せずに使用しているためです。

したがって、2番目の関数を機能させたい場合は、次のように宣言する必要があります:-

global var

を使用する前に関数でvar

def func(num):
    print num
    var = 1  <--  # You create a local variable
    if num != 0:
        func(num-1)

一方、このコードでは:

def func(num):
    print num
    var = var <--- # You are using the local variable on RHS without defining it
    if num != 0:
        func(num-1)

更新:-

ただし、@ Timのコメントによるとglobal、関数内で変数を使用しないでください。変数を使用する前に、変数を定義して、で使用しlocal scopeます。一般に、limit変数のスコープをに、名前空間localでもローカル変数のスコープにしようとする必要があります。そうすることで、コードが理解しやすくなります。locallimit

変数の範囲を拡大すればするほど、使用する必要のない外部ソースで使用される可能性が高くなります。

于 2012-10-26T17:10:55.583 に答える
6

関数内のどこかにある場合var = ...、名前 "var"は、その割り当てが発生する場所に関係なく、関数全体のローカル変数として扱われます。これは、関数内でのすべての出現がローカルスコープで解決されることを意味します。したがって、関数のスコープでまだ初期化されていないvarため、右側のvar = var結果は割り当て前の参照エラーになります。var

于 2012-10-26T17:11:21.497 に答える
1

グローバルを宣言せずにグローバルを読み取ることができます。ただし、グローバルを作成するには、グローバルとして宣言する必要があります。

于 2012-10-26T17:36:26.017 に答える
0

2番目のコードでは、RHSでローカル変数を作成し、それを定義せずに、varグローバルであるLHS変数に割り当てています(関数の外部で定義された変数は明示的にグローバルと見なされます)。

関数内にローカル変数を作成し、それをグローバル変数の値に割り当てる場合は、次のようになります。

var = 0

def func(num):
    print num
    func.var = var # func.var is referring the local
                   # variable var inside the function func
    if num != 0:
        func(num-1)

func(10)
于 2014-11-25T06:32:32.783 に答える
-1
def runscan(self):
    p = os.popen('LD_PRELOAD=/usr/libv4l/v4l1compat.so zbarcam
                /dev/video0','r')

def input(self):
    self.entryc.insert(END, code)

これはどう?次の関数にローカルの「コード」を使用して、バーコードの結果をTkinterentryBoxに挿入したい。ありがとう

于 2017-01-06T19:26:21.543 に答える
-3

各機能ブロックはローカルスコープです。グローバル変数に割り当てる場合は、明示的に行う必要があります。

var = 0

def func(num):
    print num
    global var
    var = 1
    if num != 0:
        func(num-1)

print var # 0
func(2)
print var # 1
于 2012-10-26T17:11:06.230 に答える