簡體   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