试图了解lambda中的“或”运算符

时间:2019-07-05 19:18:29

标签: python

我在解决this问题时遇到了以下代码:

f=lambda n:"a"[n:]or f(n-1)+chr(97+n)+f(n-1)

该函数生成特定深度n的abacaba序列

例如:

n = 2,输出:'abacaba'

n = 3,输出:'abacabadabacaba'

问题是,代码如何工作?即,“或”运算符在lambda中如何工作? (我假设上面的代码使用递归,据我所知,通常我们使用循环进行递归,但是在上面的代码中我看不到任何类似于循环的东西)

2 个答案:

答案 0 :(得分:3)

它的工作方式与其他地方相同。如果or的左手参数为真,则表达式的计算结果为真;否则,将得出右边的参数。在这种情况下,"a"[n:]n > 0时的空字符串,因此等效于

def f(n):
    if n == 0:
        return "a"
    else:
        return f(n-1) + chr(97+n) + f(n-1)

答案 1 :(得分:0)

让我们分解一下。

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