Python変数のスコープ

1868 ワード

キーワード:python;役割ドメインVariable Scope;
1、Pythonで変数の役割ドメインを変えることができるコードセグメントはdef、class、lamdaの3種類である.コードブロック:if/elif/else、try/except/finally、for/whileなど変数を変更しない役割ドメインは、その役割範囲外でも変数にアクセスできます.2、Python変数の検索順序はローカル変数---上位変数---グローバル変数である.
変数スコープ
コードの例:
def scopetest():
    localvar=6;
    print(localvar)  
scopetest()
#print(localvar) #         ,  localvar     
while True:  
    newvar=8  
    print(newvar)  
    break;    
print(newvar)    
try:  
    newlocal=7  
    raise Exception  
except:  
    print(newlocal) #        
Out:
6
8
8
7
number = 5
def func0():
    #It's OK to reference.
    print number

def func1():
    #new local variable.
    number = 10
    print number

def func2():
    #global declaration.
    global number
    print number
    number = 10
    print number

print "Before calling any function, number is {}".format(number)
print "Calling func0()----------"
func0()
print "Calling func1()----------"
func1()
print "After calling func1(), number is {}".format(number)
print "Calling func2()----------"
func2()
print "After calling func2(), number is {}".format(number)
Out:
Before calling any function, number is 5
Calling func0()----------
5
Calling func1()----------
10
After calling func1(), number is 5
Calling func2()----------
5
10
After calling func2(), number is 10

変数の検索順序:
def scopetest():  
    var=6;  
    print(var)
    def innerFunc():  
        print(var)  #look here  
    innerFunc()        
var=5   
print(var)  
scopetest()  
print(var)  
Out: 
5
6
6
5

呼び出し順に従って逆方向に検索し、ローカル変数からグローバル変数、例えばinnerFuncでローカル変数を検索します.いいえ、1級scopetestに進み、ローカル変数var=6を発見し、出力します.
参考:Python Variable Scope Python変数の役割ドメイン