pem*_*fir -1 python function python-2.7 python-3.x
任何机构都可以解释'and'和'或'语句在下面函数的return语句中做了什么?该函数似乎正在返回a和b的最大公分母.
def gcd(a,b): return b and gcd(b, a % b) or a
谢谢 !
我们能做的第一件事就是加上一些括号:
((b and gcd(b, a % b)) or a)
Run Code Online (Sandbox Code Playgroud)
现在让我们一块一块:
b and gcd(b, a % b)
Run Code Online (Sandbox Code Playgroud)
b如果b是假的,这将给出.否则它会给你gcd(b, a % b).换句话说,它等同于以下条件表达式:
b if not b else gcd(b, a % b)
Run Code Online (Sandbox Code Playgroud)
表达式的下一部分是:
(...) or a
Run Code Online (Sandbox Code Playgroud)
这将给你a如果前面的表达式有falsy结果,否则会给你以前的表达.
请注意,如果您来自布尔运算返回布尔值的语言,这可能不是您所期望的C:-).在python中,唯一保证返回布尔值的布尔运算是not.这一切都倾向于"正常工作",因为python知道如何在需要时获取对象的"真值".例如:
if obj:
...
Run Code Online (Sandbox Code Playgroud)
实际上会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
Run Code Online (Sandbox Code Playgroud)