Python作用域陷阱

来源:互联网 发布:淘宝童装能做吗 编辑:程序博客网 时间:2024/05/22 09:38

Python名字解析过程只搜索三个抽象层,局部,全局和内置(Local,Global,Built-in)。在Python中,可以一个函数内部定义另外的函数。如果需要创建一组外部无法公共使用的函数,这项功能就会很有用。问题是作用与的规则依然适用。考虑下面的例子:

def funca():    value = 69    funcb()    def funcb():        print(value*2)
上面的代码不能正确执行,因为funcb试图访问变量value。但是value在局部,全局或内置作用域均不存在。函数不会自动集成父作用域,Pyhton名称空间管理器也不会搜寻函数的父作用域。

传递value的方法是使value作为嵌入函数的参数:

def funca():    value = 69    funcb()    def funcb(value):        print(value*2)
对于funcb作用域来说,value还是局域变量,因此可以使用相同的名字,而且LGB规则有效。

0 0
原创粉丝点击