このコードが機能する理由:
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)
最初のコードではローカル変数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)
[〜#〜] update [〜#〜]:-
ただし、@ Timのコメントによると、関数内でglobal
変数を使用しないでください。 local scope
で使用するには、使用する前に変数を定義してください。一般に、変数のスコープをlimit
にlocal
、さらにはlocal
名前空間limit
でもローカル変数のスコープにしようとする必要があります。コードが理解しやすくなります。
変数の範囲を拡大すればするほど、使用する必要のない外部ソースによって使用される可能性が高くなります。
関数内のどこかにvar = ...
がある場合、名前 "var"は、その割り当てが発生する場所に関係なく、関数全体のローカル変数として扱われます。これは、関数内のvar
のすべてのオカレンスがローカルスコープで解決されることを意味します。したがって、var = var
の右側では、var
がないため、割り当て前の参照エラーが発生します。関数のスコープでまだ初期化されています。
2番目のコードでは、RHSでローカル変数を作成し、それを定義せずに、グローバルであるLHS変数var
に割り当てています(関数の外部で定義された変数は明示的にグローバルと見なされます)。
関数内にローカル変数を作成し、それをグローバル変数の値に割り当てることを意図している場合、これでうまくいきます。
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)
グローバルを宣言せずにグローバルを読み取ることができます。ただし、グローバルを作成するには、グローバルとして宣言する必要があります。
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に挿入したい。ありがとう