关于不定长参数和内存地址复用的问题(闭包与装饰器,修改外部函数变量与修改全局变量)
2019-05-07 22:21
302 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Victory_wbx/article/details/89930853
__nonlocal:__修改外部函数的变量
__global:__修改全局变量
def test3(**kwargs): print("这是有不定长参数的函数") # 下面这么写会报错,因为一个*是一个函数,如传入a = 3.右边的*会将a = 3的key拆出来(a),左边的*会将a继续拆分。这样会报错 print(**kwargs) test3(a = 3)
def test3(**kwargs): print("这是有不定长参数的函数") print(*kwargs) # 这样会把他的key拆出来 test(a = 3)
# ip地址1,3一样,2,4一样。是因为第1次创建了一个变量指向decorator(),第2次又创建了一个变量指向decorator()。 # 第3次的时候发现第1次的指向没用.会重新复用第1次的地址。第4次的时候发现第2次的没用,会重新复用第2次的地址 def decorator(): i = 1 def inner(): print("login", i) return inner say = decorator() print("1:", id(say)) say = decorator() print("2:", id(say)) say = decorator() print("3:", id(say)) say = decorator() print("4:", id(say)) say() 运行结果: 1: 140566030047160 2: 140566030047296 3: 140566030047160 4: 140566030047296 login 1
def decorator(fn): def inner(): print("login") fn() return inner def say(): print("say") # 第一个fn = 函数say的引用 变量say = inner say = decorator(say) # 第一次等于inner fn = say() # 第二个fn = 第一个变量say = inner 第二个变量say = inner + inner # say = inner say = decorator(say) # 第二个 fn innner-------inner ------fn say () # 第三个fn = 第二个变量say = inner + inner 第三个变量say = inner + inner + inner say = decorator(say) # 第三次 fn inner ----inner ----inner ----fn say() # print("1:", id(say)) # print("2:", id(say)) # print("3:", id(say)) # 因为后面的把前面的覆盖了所以say只输出了一次,login输出了三次 say1() 运行结果: login login login say
相关文章推荐
- 内部函数引用外部函数的同名变量或者全局变量,并且对这个变量有修改的报错原因
- 【原创_解析】关于static型变量被外部文件修改的问题..
- 关于函数内部调用全局变量的问题
- 关于全局变量和函数,在其他类中调用问题,extern关键字
- Python学习笔记 V —— 函数、函数的不定长参数、全局变量与局部变量、递归函数
- 关于Python函数定义全局变量执行弹出SyntaxWarning的问题
- PHP中关于在函数内引用全局变量的问题
- 关于函数的自己的参数,我们必须要用全局的变量来接收
- PHP中关于在函数内引用全局变量的问题
- js中解决函数中使用外部函数局部变量的问题(闭包问题)
- javascript中运用闭包和自执行函数解决大量的全局变量问题
- javascript中运用闭包和自执行函数解决大量的全局变量问题
- 【原创_解析】关于static型变量被外部文件修改的问题..
- c++中定义一个全局变量,子函数修改变量后,主函数没有改变问题
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- 关于指针作为函数参数传递的理解,对比普通变量作为函数参数的需注意点,其实就是行参和实参的问题。
- 关于C#函数对象参数传递的问题
- 关于“无法解析的外部符号”和“该符号在函数_wmain 中被引用”的问题
- 一个关于全局变量位置的问题