[英]Trying to understand “or” operator inside lambda
在解決此問題時,我遇到了以下代碼:
f=lambda n:"a"[n:]or f(n-1)+chr(97+n)+f(n-1)
該函數生成特定深度n的abacaba序列
例如:
n = 2,輸出:'abacaba'
n = 3,輸出:'abacabadabacaba'
問題是,代碼是如何工作的? 也就是說,“或”運算符如何在lambda中工作? (我假設上面的代碼使用遞歸,據我所知,通常我們使用循環進行遞歸,但我沒有看到任何類似上面代碼中的循環)
它的工作方式與其他任何地方相同。 如果or
的左手參數是真實的,則表達式對此進行評估; 否則,它會評估右手參數。 在這種情況下,當n > 0
時, "a"[n:]
是空字符串,所以它相當於
def f(n):
if n == 0:
return "a"
else:
return f(n-1) + chr(97+n) + f(n-1)
讓我們分解吧。
f = lambda # declare a variable f that is a function
n: # that takes an int parameter 'n'
"a"[n:] # if n is 0 return 'a'
or # else
f(n-1) # return a recursive call at n - 1
+ # plus
chr(97+n) # character from code 97 + n
+ # plus
f(n-1) # another recursive call
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.