Python-17-作用域

python有一個名為vars的內置函數,它返回變量關聯的不可見的字典:
>>> x = 1 
>>> scope = vars() 
>>> scope[‘x’] 
>>> scope[‘x’] += 1 
>>> x 
2
一般而言,不應修改vars返回的字典,因為根據Python官方文檔的說法,這樣做的結果是不確定的。
 
如果有一個局部變量或參數與你要訪問的全局變量同名,就無法直接訪問全局變量,因為它被局部變量遮住了。
如果需要,可使用函數globals來訪問全局變量。這個函數類似於vars,返回一個包含全 局變量的字典。(locals返回一個包含局部變量的字典。)
>>> def combine(parameter): 
…      print(parameter + globals()[‘parameter’]) 
… 
>>> parameter = ‘berry’ 
>>> combine(‘Shrub’) 
Shrubberry
 
重新關聯全局變量(使其指向新值)
>>> x = 1 
>>> def change_global(): 
…      global x 
…      x = x + 1 
… 
>>> change_global() 
>>> x 
2
 
Python函數可以嵌套,嵌套通常用處不大,但有一個很突出的用途:使用一個函數來創建另一個函數
 
def multiplier(factor):    
    def multiplyByFactor(number):     
        return number * factor    
    return multiplyByFactor
 
注意這裡外面的函數返回的是裏面的函數,返回一個函數,而沒有調用
 
>>> double = multiplier(2) 
>>> double(5) 
10 
>>> triple = multiplier(3) 
>>> triple(3) 
>>> multiplier(5)(4) 
20
Tags: