簡體   English   中英

Python函數返回語句令人困惑和復雜

[英]Python Function Return Statement is Confusing and Complex

誰能在下面函數的return語句中解釋'and'和'or'語句在做什么? 該函數似乎返回a和b的最大公分母。

def gcd(a,b): return b and gcd(b, a % b) or a

謝謝 !

我們可以做的第一件事是放在括號中:

((b and gcd(b, a % b)) or a)

現在讓我們一步一步地學習:

b and gcd(b, a % b)

如果b為假,則得到b 否則會給你gcd(b, a % b) 換句話說,它等效於以下條件表達式:

b if not b else gcd(b, a % b)

表達式的下一部分是:

(...) or a

這將給你a ,如果前面的表達式有falsy結果,否則會給你以前的表達。

請注意,如果您來自像C這樣的布爾運算返回布爾值(-)的語言,則可能不是您所期望的。 在python中, not 保證返回布爾值的唯一布爾操作not 但是,這一切都傾向於“正常工作”,因為python知道如何在需要時獲取對象的“真實值”。 例如:

if obj:
    ...

實際上會隱式檢查bool(obj)


因此,如果我要使用if套件將整個內容寫出來,它將看起來像:

def gcd(a, b):
    if not b:  # Likely `b == 0`.  This is the recursion base-case.
         val = b
    else:
         val = gcd(b, a % d)

    if val:
        return val
    else:
        return a

該函數連續返回gcd(b, a % b)b具有真實值,即在這種情況下不等於零。

b達到0 (連續分配給a % b的結果之后)時, b and gcd(b, a % b)將為False並且將返回a的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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