python学习之匿名函数和UnboundLocalError错误
来源:互联网 发布:多益网络有什么游戏 编辑:程序博客网 时间:2024/05/03 23:59
首先带参数的函数
def g(x): return x*xprint(g(1))
和
a = lambda x: x**x #匿名函数print(a(1))
这两个是等价的。
不带参数的函数def g(x): def a(): return x*x return a#和def g1(x): return lambda :x*xa = g(1)b = g1(2)print(a())print(b())#输出 1 4
是等价的。
如果你要问以上两个函数中第一个函数的参数x为什么能在内层函数a中使用的话,那么久涉及到作用域的问题了,这个x是当外层函数调用返回内层函数时,就会被添加到内层函数里面。
这个问题和下面这个例子是相似的。
x = 10def g(): print(x)#输出结果10 其中x是全局变量
但是当我们用下面这种
x = 10def g(): x += 1#报错:Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> g() File "<pyshell#9>", line 2, in s x+=1UnboundLocalError: local variable 'x' referenced before assignment
此时的话,python就会认为x是一个局部变量,同时又因为没有定义局部变量x,所以在运行的时候就会报UnboundLocalError错误。如果非要用的话,我们可以用global关键字通知python说明x是全局变量而不是一个局部变量。
例如:
x = 10def g(): global x x += 1 print(x)#输出结果11 其中x是全局变量
这样的话我们就可以解决这个问题了。
但是如果我们在函数内部创建了局部变量与全局变量相同名称的变量,那么python就会认为它是一个局部变量。
eg:
x = 2def g(): x = 10#此时它是函数的局部变量 print(x)#输出10
如果在想要点官方信息的话可以看看这个链接(我只是搬运一下):
https://docs.python.org/3/faq/programming.html#why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result
0 0
- python学习之匿名函数和UnboundLocalError错误
- python学习之匿名函数lambda
- python学习-匿名函数
- python闭包 unboundLocalError错误解决----转载
- Python学习笔记-匿名函数
- 【Python学习日记】匿名函数
- python学习记录---匿名函数
- Python学习 – 匿名函数
- Python进阶之匿名函数
- python之匿名函数lambda
- python学习笔记 匿名函数和装饰器
- JavaScript学习之 匿名函数
- python函数式编程之返回函数、匿名函数、装饰器、偏函数学习
- Python的内置函数和匿名函数
- python入门基础函数和匿名函数
- Python学习笔记--匿名函数lambda
- python学习——匿名函数
- python学习总结---lambda匿名函数
- 使用 Apache ResponseHandler 处理 Http 返回信息
- 程序员如何快速的熟悉一个系统?
- 数据压缩原理实验1_彩色空间转换实验YUVtoRGB
- centos7minial 安装图形界面 以及卸载
- 安装opencv无法使用import cv2
- python学习之匿名函数和UnboundLocalError错误
- Numpy中argsort函数的简单用法
- 【算法与数据结构】将字符串中最长的单词输出
- C#笔记整理(七)
- 算法基础篇(6)------线段树
- Django csrf 两种方法设置form
- eclipse创建maven web项目时,index.jsp报错
- 安卓学习笔记:让自己显示在地图上(使用百度地图API)
- 与堆栈地址有关的计算题