[英]Python lambda return syntax
需要一些有关此代码的帮助,无法在此处计算 lambda 语法:
def func(m,n):
if m < n:
return ____
elif m==n:
return ____
else:
return ____
输入:
func(3,10)()()()()()()
func(3,7)()()()
func(4,4)()
func(10,5)()()
func(9,5)()()
output 应该是:
13
m==n
m==n
15
14
我试过了:
def func(m, n):
if m < n:
return lambda: func(m+1, n-1)
elif m == n:
return lambda: print("m == n")
else:
return lambda: print(n+m)
这个 function 与 main 一样没有错误:
func(3,10)()()()()() # ()
func(3,7)()()()
func(4,4)()
func(10,5)() # ()
func(9,5)() # ()
有办法让它与带注释的括号一起使用吗?
问题是您的lambda
返回None
,因此当您尝试调用返回值时(这是您执行f()()
时发生的情况),您正在尝试调用None
。
如果您希望能够调用 function 的返回值,并调用该返回值等任意次数, lambda
不是一个很好的工具,因为它无法返回对自身的引用。 不过,实现__call__
的 object 使其相当简单:
class InfiniteCallable:
def __init__(self, msg = None):
self.msg = msg
def __call__(self):
if self.msg is not None:
print(self.msg)
self.msg = None
return self
def func(m,n):
if m < n:
return InfiniteCallable(m+n)
elif m==n:
return InfiniteCallable("m == n")
else:
return func(n, m)
请注意, InfiniteCallable.__call__(self)
返回self
,这意味着每次调用InfiniteCallable
时,它都会返回对自身的引用,因此您可以再次调用它,无限次地重复该过程。 self.msg
属性允许它在第一次调用时打印消息,而不是在每次重复调用时打印消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.