表达还是陈述?:'if a:do_something()'或'(a and do_somthing())',哪个更好?

2024-04-27 02:51:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现python可以很容易地用lisp风格编写代码。在

经验:

正常方式:

if a:
    do_something()

“功能”方式:

^{pr2}$

正常方式:

if not a:
    do_somthing()
elif b:
    do_otherthing()

“功能”方式

((not a and do_something()) or (b and do_otherthing()))

正常方式:

a = bla.get_a()
if a is None:
    a = A()

“功能”方式:

a = (bla.get_a() or A())

我必须用这种方式写几行代码。在

但我不知道是“Python”还是比平时更糟。在

谷歌编码风格也没有定义哪个更符合规则。在


Tags: orand代码功能getif风格方式
3条回答

如果你所说的“函数方式”是指“这看起来有点像LISP”,那当然,你已经用括号包围了代码,去掉了冒号。但这并没有使这成为一种“函数式”编程风格,正如它使附加语句成为一个列表一样。本质上,您是在利用逻辑运算符的短路特性使代码更难阅读。在

另外,第二个示例中的代码示例实际上在逻辑上并不相同。如果a为false,do_something()返回一个false值(包括None,如果没有显式的返回语句,则自动返回的值),则{}不会实际短路,如果{}为真,则{}也将执行。在

((not a and do_something()) or (b and do_otherthing()))不同于

if not a:
    do_somthing()
elif b:
    do_otherthing()

通过以下方式:

如果do_something()返回一个假值,则第二个表达式(b and do_otherthing())也将被计算。在

像这样工作的表达式应该使用Python 2.5中引入的^{} syntax

^{pr2}$

但是,由于您不需要结果,所以应该避免这样做,最好使用带有:的语句语法。在

当然

if a: 
    do_something()

第二个(a and do_somthing()))是可怕的和骇人的。正如@limelights所说,Python的Zen说,显式优于隐式,可读性计数。如果您还没有读过PEP-8,那么您可能应该阅读PEP-8。在

相关问题 更多 >