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