Python lambda作用范围的一点疑惑,pythonlambda,标题描述可能不是很准确,
Python lambda作用范围的一点疑惑,pythonlambda,标题描述可能不是很准确,
标题描述可能不是很准确,因为我不知道问题的原因在哪里
在《Python学习手册第三版》第16章,作用域和参数这里,有一个例子,反复想了很久,不得其解,希望大家帮我解惑。
下面是书中的内容:
嵌套作用域和lambda
尽管对于def本身来说,嵌套作用域很少使用,但是当开始编写lambda表达式时,就要注意了。我们到17章才会深入学习lambda,但是简短地说,它就是一个表达式,将会生成后面会被调用的一个新的函数,与def语句很相似。由于它是一个表达式,尽管能够使用在def中不能使用的地方,例如,在一个列表或是字典常量之中。
就像def,lambda表达式引入了新的本地作用域。多亏了嵌套作用域查找层,lambda能够看到所有生存在所编写的函数的变量。因此,以下的代码现在能够运行,但仅仅是因为如令能够使用嵌套作用域法则了。
>>> def func(): x = 4 action = (lambda n: x ** n) return action>>> x = func()>>> print x(2)16
我的疑惑是,为什么需要先把x赋值给func(),如果不赋值,直接调用func()会显示:
<function <lambda> at 0x01B57F30>
最后,print x(2),为什么这里可以传参数,并且传进的参数,变成了函数例子中lambda表达式里的n?
不知道我这样表达是否清楚。
谢谢大家。
因为func()返回的是一个function。
首先更正你的一个概念:
为什么需要先把x赋值给func() 正确的说法是 把func()的返回值赋值给x。
然后再来看看这段代码的实际含义:
def func(): # 定义函数 func() x = 4 # 函数内部变量 x action = (lambda n: x ** n) # 定义匿名函数 action(n) return action # 返回函数 action 函数对象本身,而不是它的值x = func() # func() 的返回值赋值给 x,此时的 x 是一个函数对象print x(2) # 调用 action(2)
其实还可以等价写成下面这个样子:
def outer_func(): x = 4 def inner_func(n): return x ** n return inner_funcx = outer_func()print x(2)
如有疑问,欢迎讨论。
不赋值也行啊,func()(2),action就是一个接受一个参数的匿名函数对象嘛。既然是一个函数对象,那就要用()才能调用它,然后这个函数对象接受一个参数,那就给个参数它咯:)。
编橙之家文章,
相关内容
- Python实现函数调用新手遇到的问题,python函数调用新手
- 小白问python dict根据value取key值应该怎么写?,pythondict
- Python requests多线程抓取请求都报异常无解,pythonreques
- Python sys.path哪个命令可以代替append,sys.pathappend,如题。
- python3.x版本 通过urlopen打开一个以html结尾的网址 转换成
- python去重元给中有字典项怎么去重,python字典项,在 p
- Python pip install xlwings遇到error找不到原因,pipxlwings,按照
- 《Python编程实践》for语法使用啥意思,,《Python编程实践
- 准备用python做下载器怎么样?需要了解些知识点,pyt
- python urllib2中打印处理信息的方法是什么,pythonurllib2
评论关闭