簡體   English   中英

試圖理解lambda中的“或”運算符

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM