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