Python-17-作用域
python有一个名为vars的内置函数,它返回变量关联的不可见的字典:
>>> x = 1
>>> scope = vars()
>>> scope[‘x’]
1
>>> 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)
9
>>> multiplier(5)(4)
20