时间:2021-05-22
在表达式中引用变量时,Python 会按照如下的顺序遍历各个作用域,寻找该变量:
如果上述作用域内都找不到变量,就会报 NameError 异常。
但是对变量赋值时,规则会有所不同。
如下函数
def function(): flag = True def helper(): flag = False helper() print flagfunction()由于 helper 中变量是赋值,这里 flag 输出仍为 True。习惯了 c 语言之类静态类型语言,这种设计起初会感到困惑,但其可以有效地防止局部变量污染函数外的环境。
需求总是多样的,一定有程序员想在赋值时访问外围作用域。如果是 Python2,他可以这么做
def function(): flag = [True] def helper(): flag[0] = False helper() print flagfunction()先用 flag[0] 是读操作,产生一次变量引用,寻找到外围作用域中 flag,这时候再赋值 flag[0] = False 便不会新定义变量了。
如果是 Python3,则可以使用 nonlocal 关键字。
def function(): flag = True def helper(): nonlocal flag flag = False helper() print flagfunction()声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
特点python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。Python中
在程序中设置的sum属于全局变量,而在函数中没有sum的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始
本文实例分享了js私有作用域中创建特权方法,供大家参考,具体内容如下特权方法就是有权访问私有变量和私有函数的公有方法:functionMyObject(){va
所有的JavaScript事件处理程序的作用域是在其定义时的作用域而非调用时的作用域中执行,并且它们能存取那个作用域中的任何一个本地变量。但是HTML标签属性注
本文实例讲述了JavaScript闭包与作用域链。分享给大家供大家参考,具体如下:闭包定义闭包指的是有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,