繁体   English   中英

Python lambda 返回语法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM