2015-01-03 84 views
0

有什麼辦法如何編寫包含if和lamba的遞歸函數? 可以使用lambda來重寫。包含if語句的lambda函數

def factorial(x): 
    if x <= 1: 
     return 1 
    return x * factorial(x - 1) 

print(factorial(5)) 
+0

你爲什麼覺得需要這樣做? – BrenBarn

+0

只是問是否有可能 –

+0

親愛的@BrenBarn我問是否可以使用lambda中的if語句。 –

回答

4

沒有,或者至少在沒有分配功能,一個變量,然後用這個名字來稱呼它。但是你仍然不能在函數中使用任何語句。

無論如何,不​​要這樣做。 A lambda函數完全是像Python中的普通def函數,除了它不能包含語句的限制之外。

在Python中使用lambda的唯一原因是爲了避免定義一個命名的函數,如果你只需要一個簡單的callable返回一些值。

+0

>>> fa = lambda x:1如果x <= 1 else x * fa(x-1)'? – Kasramvd

+0

@卡斯拉 - 這是不同的。您發佈的代碼中沒有任何聲明(課程的任務除外)。 OP在詢問他是否可以用lambda表達一個聲明,這是不可能的。 – iCodez

+0

更新了我的回答,提到這種情況。 – ThiefMaster

2

是的,這是可能的這種具體情況。

>>> factorial = lambda x: 1 if x < 1 else x * factorial(x - 1) 
>>> factorial(5) 
120 

雖然我不會推薦它。標準函數定義對我來說似乎更加可讀。

2
>>> l = lambda i: 1 if i<=1 else i * l(i-1) 
>>> l(5) 
120 
>>> 5*4*3*2*1 
120