一个问题?
Topic source你这样子就可以了,把那个lambda的x,y去掉
>>> def build(x,y):
return lambda : x*x + y*y
>>> f = build(1,2)
>>> f()
5
def build(x, y):
def g(x, y):
return x * x + y * y
return g
>>> f = build(1,2)
>>> f
<function <lambda> at 0x7fa2c73ed668>
当我们调用build时,返回的并不是结果,而是g函数
>>> f(1,2)
5
调用函数f时,才真正计算的结果
不知道这样理解对不对,求大神指教.
这样定义:
def build(x, y):
def g():
return x * x + y * y
return g
返回的函数在调用时不需要参数,因为def g()
根本就没定义参数:
f = build(1, 2)
f()
这样定义:
def build():
def g(x, y):
return x * x + y * y
return g
返回的函数在调用时必须要参数,因为def g(x,y)
定义了两个参数:
f = build()
f(1, 2)
函数调用需不需要参数是定义的时候就确定的!
老师这么写容易引发误会,build函数有两个参数,a和b,只有传入两个参数调用build函数才会返回lambda函数,返回的lambda函数也需要两个参数来计算最终返回值.前两个参数,和后两个参数是不相干的,都写成x,y容易误导初学者!!
楼上的大兄弟说的很好
build函数写成这样,应该就懂了
def build(x,y):
return lambda a,b: a*a+b*b
这里的x,y没有没实际使用,只是需要两个参数
f = build(3,4)
f(1,2)
结果是5
f = build('a','b')
f(1,2)
结果也是5。
就想廖老师说的
def build(x,y):
return lambda: x*x+y*y
相当于
def build(x,y):
def g():
return x*x+y*y
return g
这样实际上是使用了 build函数的两个参数x,y,函数内不管嵌套了多少函数,都是可以使用x,y。
如果是这样的话 def build(x,y): return lambda a,b: aa+bb
build函数根本就不需要传参数了,直接 def build(): return lambda a,b: aa+bb
返回一个需要两个参数的匿名函数
- 1
方遒挥斥之
为什么lambda函数作为返回函数的时候不是
反而这个时候 可以这样用了
求解答!