Python中的'var和do_something_with(var)'这样的语句有什么影响?

yen*_*sun 11 python

在寻找包源代码中的一些答案(特定的漏勺)时,我偶然发现了一个我无法理解的字符串.我的PyCharm对此皱眉,'声明似乎没有效果'.

这是代码摘要:

...
for path in e.paths():
    keyparts = []
    msgs = []
    for exc in path:
        exc.msg and msgs.extend(exc.messages()) # <-- what is that?
        keyname = exc._keyname()
        keyname and keyparts.append(keyname) # <-- and that
    errors['.'.join(keyparts)] = '; '.join(interpolate(msgs))
return errors
...
Run Code Online (Sandbox Code Playgroud)

它似乎是非常pythonic,我想掌握它!

UPD.因此,我认为它根本不是pythonic - 可读性因速记而受到损害.

hap*_*ave 15

如果keyname的计算结果为False,则该and语句将立即返回false,而不是评估第二部分.否则,它将评估第二部分(而不是在这种情况下返回值很重要).所以它基本上相当于:

if keyname: 
    keyparts.append(keyname)
Run Code Online (Sandbox Code Playgroud)

我不确定它是非常pythonic,因为我刚建议的版本似乎更具可读性(至少对我个人而言).

  • 同意.OP的例子没有充分的理由违反了"明确胜过隐性". (3认同)