關(guān)鍵詞: python;作用域; Variable Scope;
1杏节、Python中能夠改變變量作用域的代碼段是def、class、lamda三類哩簿。
代碼塊:if/elif/else衣屏、try/except/finally躏升、for/while 等不更改變量的作用域,在其作用范圍之外狼忱,仍然能夠訪問到變量膨疏。
2、Python變量搜索順序是局部變量---上層變量---全局變量钻弄。
變量作用域
代碼示例:
def scopetest():
localvar=6;
print(localvar)
scopetest()
#print(localvar) #去除注釋這里會報(bào)錯(cuò)佃却,因?yàn)閘ocalvar是本地變量
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
根據(jù)調(diào)用順序反向搜索,先本地變量再全局變量窘俺,例如搜先在innerFunc中搜索本地變量饲帅,沒有,向上一級scopetest,發(fā)現(xiàn)本地變量var=6洒闸,輸出染坯。