python 變量作用域

幾個概念:

python能夠改變變量作用域的代碼段是def、class、lamda.
if/elif/else、try/except/finally、for/while 並不能涉及變量作用域的更改,也就是說他們的代碼塊中的變量,在外部也是可以訪問的
變量搜索路徑是:本地變量->全局變量


python能夠改變變量作用域的代碼段是def、class、lamda.
def scopetest():
    localvar=6;
    print(localvar)
  
scopetest()
#print(localvar) #去除註釋這裏會報錯,因爲localvar是本地變量
if/elif/else、try/except/finally、for/while
while True:
    newvar=8
    print(newvar)
    break;
 
print(newvar)
 
try:
    newlocal=7
    raise Exception
except:
    print(newlocal)#可以直接使用哦
輸出結果:8 8 7

可見這個關鍵字中定義變量,他們的作用域跟外部是一致的,這個跟Java的作用域概念有點不一樣。

變量搜索路徑是:本地變量->全局變量
def scopetest():
    var=6;
    print(var)#
    
var=5 
print(var)
scopetest()
print(var)
輸出結果:5 6 5

這裏var 首先搜索的是本地變量,scopetest()中 var=6相當於自己定義了一個局部變量,賦值爲6. 當然如果的確要修改全局變量的值,則需要如下:


def scopetest():
    global var 
    var=6;
    print(var)#
    
var=5 
print(var)
scopetest()
print(var)
輸出結果:5 6 6
再看一種這種情況:


def scopetest():
    var=6;
    print(var)#
    def innerFunc():
        print(var)#look here
    innerFunc()
    
var=5 
print(var)
scopetest()
print(var)
輸出結果:5 6 6 5
根據調用順序反向搜索,先本地變量再全局變量,例如搜先在innerFunc中搜索本地變量,沒有,好吧,找找調用關係上一級scopetest,發現本地變量var=6,OK,就用他了
--------------------- 
作者:lovingprince 
來源:CSDN 
原文:https://blog.csdn.net/lovingprince/article/details/6627555 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章