g() 这样输出的结果为12,因为func函数调用时定义的X也被认为只属于局部作用域了,但是此时函数g()里定义的x并非全局变量,用前述的global关键字肯定是不行的, 所以又有了nonlocal,这样写: def g(): x = 12 func(): nonlocal x x = 1 func() print(x) g() 这时,输出的结果就是我们预期的1了,nonl...
global用于在局部作用于修改或重定义全局变量 nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外) 这只是很浅的理解方式 注意python的特性,变量有mutable和immutable之分,对于mutable变量的,在内部作用域内做修改时完全可以的,不需要上面两个关键字的修饰,比如下面的程序: a = 12 li = [1, 2, 3] def...
3. Nonlocal scope¶ Nested functions introduce a new type of scope called asnonlocalscope. When a nested function wants to share the local scope of parent functions,nonlocalkeyword is used. In such cases, declaring parent function variables asglobaldoes not work. ...
内部函数 do_global() 中用 global 关键字声明了一个全局变量,然后对全局变量 spam 进行赋值(如果已存在全局变量 spam,则会修改原全局变量值),但是这不会影响 scope_test() 函数中局部变量 spam 的值,因为这两个 spam 存放在不同的命名空间,外层函数中的 spam 依然是nonlocal spam。 Python 的一个特殊规定是...
L (Local) 局部作用域 E (Enclosing) 闭包函数外的函数中 G (Global) 全局作用域 B (Built-in) 内建作用域 以L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
1、局部作用域改变全局变量(L中修改G中的变量)用global,global同时还可以定义新的全局变量 2、内层函数改变外层函数变量(在L中修改E中的变量)用nonlocal,nonlocal不能定义新的外层函数变量,只能改变已有的外层函数变量,同时nonlocal不能改变全局变量。 闭包(closure) ...
global 关键字: 在函数内部使用 global 关键字声明一个变量为全局变量,可以修改全局变量的值。nonlocal 关键字: 在嵌套函数中使用 nonlocal 关键字声明一个变量为上一层函数的局部变量,可以修改上一层函数的局部变量的值。 (这里没有嵌套函数,nonlocal 关键字暂时注释)Python 是一种面向对象的编程语言。 面向...
def outer(): outer_var = "Outer variable" def inner(): nonlocal outer_var outer_var = "Modified by inner" print(outer_var) # 输出:"Modified by inner" inner() print(outer_var) # 输出:"Modified by inner" outer() Global:在函数外部定义的变量,在全局范围内均有效。 global_var = "I'...
# nonlocal应用于一个嵌套的函数的作用域中的一个名称 例如:start = 100def tester(start): def nested(label): nonlocal start # 指定start为tester函数内的local变量 而不是global变量start print(label, start) start += 3 return nested# global为全局的变量 即def之外的变量def tester(start): def neste...
global/nonlocal可以修改这个特性 定义时决定解析到哪个作用域;运行时决定解析的值 前面这么多内容,整理成规则却非常简洁,有没有感受到Python的确是很协调、很纯粹的语言呢? 后记 本文是从面向初学者的一个演示文稿中整理而来,这是前一部分,后一部分讲面向对象。演示文稿当中的一部分更基础的内容,考虑到受众原因...