表达式或声明?:'如果a:do_something()'或'(a和do_somthing())'哪个更好?

use*_*851 2 python expression coding-style

我发现python很容易用"lisp"风格编码.

EXP:

正常方式:

if a:
    do_something()
Run Code Online (Sandbox Code Playgroud)

'功能'方式:

(a and do_something())
Run Code Online (Sandbox Code Playgroud)

正常方式:

if not a:
    do_somthing()
elif b:
    do_otherthing()
Run Code Online (Sandbox Code Playgroud)

'功能'的方式

((not a and do_something()) or (b and do_otherthing()))
Run Code Online (Sandbox Code Playgroud)

正常方式:

a = bla.get_a()
if a is None:
    a = A()
Run Code Online (Sandbox Code Playgroud)

'功能'方式:

a = (bla.get_a() or A())
Run Code Online (Sandbox Code Playgroud)

这个功能非常迷人,我可以在一行编码,必须以正常方式写入几行.

但我不知道它是'pythonic'还是比平常更糟糕.

谷歌编码stype也没有定义哪个更符合规则.

jam*_*lak 7

无疑

if a: 
    do_something()
Run Code Online (Sandbox Code Playgroud)

第二个(a and do_somthing()))是可怕的和hacky.正如@limelights所说,Python的Zen表示Explicit比隐含可读性更好.如果你还没有,你应该阅读PEP-8.