Python lambda return 语法
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)()()
输出应该是:
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)
这个函数与 main 一样没有错误:
func(3,10)()()()()() # ()
func(3,7)()()()
func(4,4)()
func(10,5)() # ()
func(9,5)() # ()
有一种方法可以使它工作 用 注释的括号?
问题是您的 lambda
returns None
,因此当您尝试调用 return 值时(当您执行 f()()
) 你正在尝试调用 None
.
如果你希望能够调用一个函数的return值,并且调用那个return值等等,一个任意数有时,lambda
不是一个很好的工具,因为它不能 return 对自身的引用。不过,实现 __call__
的对象使其相当简单:
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)
return 和 self
,这意味着每次调用 InfiniteCallable
它 return 都是对自身的引用,您可以因此再次调用,无限次地重复该过程。 self.msg
属性允许它在 第一次 调用时打印消息,而不是在每次重复调用时打印消息。
需要一些关于此代码的帮助,这里无法理解 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)()()
输出应该是:
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)
这个函数与 main 一样没有错误:
func(3,10)()()()()() # ()
func(3,7)()()()
func(4,4)()
func(10,5)() # ()
func(9,5)() # ()
有一种方法可以使它工作 用 注释的括号?
问题是您的 lambda
returns None
,因此当您尝试调用 return 值时(当您执行 f()()
) 你正在尝试调用 None
.
如果你希望能够调用一个函数的return值,并且调用那个return值等等,一个任意数有时,lambda
不是一个很好的工具,因为它不能 return 对自身的引用。不过,实现 __call__
的对象使其相当简单:
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)
return 和 self
,这意味着每次调用 InfiniteCallable
它 return 都是对自身的引用,您可以因此再次调用,无限次地重复该过程。 self.msg
属性允许它在 第一次 调用时打印消息,而不是在每次重复调用时打印消息。