出于某种原因,这个功能让我感到困惑:
def protocol(port):
return port == "443" and "https://" or "http://"
有人可以解释幕后发生的事情的顺序以使这项工作按原样进行吗?
在我尝试之前,我是这样理解的:
要么 A)
def protocol(port):
if port == "443":
if bool("https://"):
return True
elif bool("http://"):
return True
return False
或 B)
def protocol(port):
if port == "443":
return True + "https://"
else:
return True + "http://"
这是 Python 中的某种特殊情况,还是我完全误解了语句的工作原理?
原文由 orokusaki 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一个古老的成语;插入括号以显示优先级,
x and y
returnsy
ifx
is truish,x
ifx
is falsish;a or b
,反之亦然,返回a
如果它是真实的,否则b
。因此,如果
port == "443"
为真,则返回and
的 RHS,即"https://"
。否则,and
为假,因此or
发挥作用并返回“http://”, 它的 RHS。在现代 Python 中,翻译这个古老习语的更好方法是: