nonlocal和global】的更多相关文章

1.在函数中声明函数 在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置 # 函数的互相调用 # def func1(): # print("我是神器的func1") # # def func2(): # func1() # print("我是神器的func2") # # def func3(): # print("我是神器的func3") # # func5() # # def…
nonlocal 与 global nonlocal翻译是非本地,global翻译是全局,它们都是python3的新特性.如果以类C语言的思维去看这2个关键字,很可能觉得它们差不多.但实际上它们很不一样. 下面先说说global.顾名思义,global能将一个变量提升为全局, 但是这个关键字有个特别的语法要求,即不能同时定义和声明,如global a=1. a = 1 def func(): print(a) global a a += 2 # SyntaxWarning: name 'a' i…
考虑这样一个python程序: x = 12 def func(): x = 1 func() print(x) 输出为:x = 12 因为函数内部定义的x被认为只属于局部作用域,为了表明我么引用的是全局的x而不是新定义一个局部的x, 可以使用global关键字: x = 12 def func(); global x x = 1 func() print(x) 可以发现输出已经变成了1,也就是在函数内部成功修改了一个全局变量 还有一种情形,就是嵌套的局部作用域的问题: def g(): x =…
获取变量时遵循LEGB原则,修改变量时需要global/nonlocal进行修改 global # global的使用 函数外定义了全局变量: global关键字在函数内会修改全局变量 函数外没定义全局变量: global会在函数内定义全局变量(不管是几层闭包, 只要调用了就会定义) nonlocal .修改当前作用域上一级(局部变量) .如果上一级也没有, 就继续向上 .再找不到, 就会报错(不会到全局变量中寻找) def outer(): a = 1 def inner(): # nonlo…
在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(builtins模块)的顺序来进行的,即所谓的LEGB规则. 然而当在一个函数内部为一个变量赋值时,并不是按照上面所说LEGB规则来首先找到变量,之后为该变量赋值.在Python中,在函数中为一个变量赋值时,有下面这样一条规则: 当在函数中给一个变量名赋值是(而不是在一个表达式中对其进行引用),Pytho…
nonlocal 首先,要明确 nonlocal 关键字是定义在闭包里面的.请看以下代码: x = 0 def outer(): x = 1 def inner(): x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x) 结果 # inner: 2 # outer: 1 # global: 0 现在,在闭包里面加入nonlocal关键字进行声…
1. 执行代码 以下实例都是通过执行以下代码,需要把以下执行代码放在后面实例代码的后面. a = outer_func()print("call a()") a() a() a() b = outer_func()print("call b()") b() b() b() 2. 未使用nonlocal def outer_func(): count = 3 def inner_func(): count += 1 print("count", c…
命名空间 -------‘’存放名字与值的关系”的空间 代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间: 在函数的运行中开辟的临时的空间叫做局部命名空间. 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法. 三种命名空间之间的加载与取值顺序: 加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程…
##################################总结######################################动态参数 *args:位置参数动态传参,接收到的是元祖,传多少都可以,不传也可以 **kwargs:关键字参数动态传参,接收到的是字典 顺序: 位置参数—*args—默认值参数—**kwargs 以上参数可以随意搭配使用 def func(): pass 形参的位置*,** ——聚合 实参的位置*,** ——打散 def hehe(*args,**k…
1. glob.glob() glob模块是Python最简单的模块之一, 内容非常少, 用它可以查找符合特定规则的文件路径名, 查找文件时只会用到三个匹配符: * :匹配0个或多个字符 ? : 匹配单个字符 [] : 匹配指定范围内的字符, 如[0-9]匹配数字 返回的是列表 list类型,是所有路径下的符合条件的文件名的列表: 例子:要对某个文件进行处理,需要使用改函数,得到文件名:参数为相对路径(也可以为绝对路径),指当前目录下的train文件夹下的所有图片 还有我发现glob.glob(…