【发布时间】:2010-09-29 22:53:15
【问题描述】:
该方法搜索第一组单词字符(即:[a-zA-Z0-9_]),如果失败则返回第一个匹配的组或None。
def test(str):
m = re.search(r'(\w+)', str)
if m:
return m.group(1)
return None
同样的函数可以改写为:
def test2(str):
m = re.search(r'(\w+)', str)
return m and m.group(1)
这也是一样的,并且是记录在案的行为;正如this page 明确指出的那样:
表达式
x and y首先计算x;如果x为假,则返回其值;否则,将评估y并返回结果值。
但是,作为一个布尔运算符(它甚至在手册上这么说),我希望 and 返回一个布尔值。结果,当我发现(如何)它起作用时,我是astonished。
还有哪些其他用例,和/或这种相当不直观的实现的基本原理是什么?
【问题讨论】:
-
其实很多语言都有这个,它肯定早于Python。它传统上被用作三元条件的替代品,早在我们有
if...else表达式之前,它仍然可以像C# 的空合并运算符??一样使用。就我个人而言,我会尽量避免使用它,这既是因为“虚假”值的潜在问题,也是因为“显式优于隐式”。return m and m.group(1)还可以,但如果你走得更远,m is not None and...可能会更清楚。
标签: python boolean-expression least-astonishment