nonlocal是 Python 中的一个关键字,用于在嵌套的函数中声明一个变量,使其指向外层(非全局)作用域中的变量。这意味着,当你在一个函数内部定义了另一个函数,并希望内层函数能够修改外层函数的局部变量时,就需要使用nonlocal。 2.nonlocal的使用场景 修改闭包中的变量:闭包是一种特殊的对象,它允许一个函数访问创建...
L(Local):最内层,包含局部变量,比如一个函数/方法内部。 E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。 G(Global):当前脚本的最外层,比如当前模块的全局变量。
inner: nonlocal outer: local 这是因为global关键字的使用让我们在inner()函数(局部作用域)内声明了一个global变量,故如果我们在inner()函数内做任何修改,则修改的结果只会在局部作用域(也即outer()函数)之外出现。此外,nonlocal还可以用来构建如下列所示的闭包函数func(参见我的博客《Python技法4:闭包和保存自由...
nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。 注意 nonlocal只在闭包里面生效,作用域就是闭包里面的,外函数和内函数都影响,但是闭包外面不影响。 nonlocal 语句使列出的标识符引用除 global 变量外最近的封闭范围中的以前绑定的变量。 这很重要,因为绑定的默认行为是首先搜索本地名称...
nonlocal关键字用于在嵌套函数中修改外层(非全局)变量。在Python中,当在嵌套函数中想要修改外层函数的局部变量时,通常会使用nonlocal关键字。nonlocal关键字用于声明变量为非...
看上去不使用 nonlocal 和global 也能改变外边的变量?我们以此来引出变量和对象的介绍。 在Python 中,变量实际上是对对象的引用。我们考虑下边的两行代码: x = "abc" x[0] = "b" ## <= TypeError: 'str' object does not support item assignment x = "bcd" 当你写 x = "abc" 时,Python实际上做...
nonlocal是在Python3.2之后引入的一个关键字,它是用在封装函数中的。 首先,要明确 nonlocal 关键字是定义在闭包里面的(不定义在闭包里会抛异常SyntaxError: nonlocal declaration not allowed at module level)。 x = 0 def outer(): x = 1 def inner(): ...
除了上述列举的常用保留字外,Python还有一些其他不常用的保留字,如nonlocal用于在嵌套函数中声明一个非全局变量,async和await用于定义异步函数和挂起异步函数的执行等。这些保留字虽然不常用,但在特定的编程场景中却发挥着不可或缺的作用。在使用保留字时,我们需要特别注意避免将其作为变量名或函数名。如果不小心...
nonlocal 和 global 对变量名的赋值和引用,是两种不同的情况:赋值:创建一个变量或者修改。引用:检索其值。以上两者的差别,会导致我们在函数中:赋值一个全局变量:等于创建一个局部变量。自由变量:等于创建一个局部变量。引用:正常检索其值。我们修改上例中的inner函数为如下形式:definner(i1,i2='i2'):...
nonlocal关键字用于声明一个非局部变量,用于标识外部作用域的变量。15.条件语句in、isin:成员运算符,如果在指定的序列中找到值返回True,否则返回False。is:身份运算符,是判断两个标识符是不是引用自一个对象。16.异步编程async、await是python3的新特性,可以进行协程运行。17.上下文管理with用于简化异常处理18....