Python-17-作用域

Posted swefii

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
 
像multiplyByFactor这样存储其所在作用域的函数称为闭包。 通常,不能给外部作用域内的变量赋值,但如果一定要这样做,可使用关键字nonlocal。 这个关键字的用法与global很像,让你能够给外部作用域(非全局作用域)内的变量赋值

以上是关于Python-17-作用域的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript全局作用域,函数作用(局部作用域),块级作用域,动态作用域,作用域链

0140 JavaScript作用域:概述全局作用域函数作用域块级作用域

作用域和闭包作用域和作用域链

js 静态作用域和动态作用域

JavaScript 作用域作用域链变量提升

JavaScript 作用域作用域链变量提升