相关疑难解决方法(0)

Python中的"布尔"操作(即:和/或运算符)

此方法搜索第一组单词字符(即:)[a-zA-Z0-9_],返回第一个匹配的组或None出现故障.

def test(str):
    m = re.search(r'(\w+)', str)
    if m:
        return m.group(1)
    return None
Run Code Online (Sandbox Code Playgroud)

相同的功能可以改写为:

def test2(str):
    m = re.search(r'(\w+)', str)
    return m and m.group(1)
Run Code Online (Sandbox Code Playgroud)

这工作原理相同,并且是记录在案的行为; 作为此页中明确指出:

表达式x and y首先评估x; 如果x为false,则返回其值; 否则,y将评估并返回结果值.

但是,作为一个布尔运算符(它甚至在手册上都这么说),我期望and返回一个布尔值.结果,当我发现(如何)这有效时,我感到惊讶.

有什么其他用例,和/或这种相当不直观的实现的理由是什么?

python boolean-expression least-astonishment

11
推荐指数
2
解决办法
5967
查看次数

赋值语句中的短路是否被认为是好的风格?

如果我理解正确的话

myvar = a and b or c
Run Code Online (Sandbox Code Playgroud)

给出了相同的结果

if a:
  if b:
    myvar = b
  else:
    myvar = c
else:
  myvar = c
Run Code Online (Sandbox Code Playgroud)

所以我觉得它更优雅.

我似乎记得在JavaScript代码中看到这种短路赋值语句.但是,在赋值语句中使用短路是否被认为是Python中的好风格?

python

5
推荐指数
2
解决办法
704
查看次数