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 属性允许它在 第一次 调用时打印消息,而不是在每次重复调用时打印消息。