【发布时间】:2012-10-22 13:25:53
【问题描述】:
以下哪个 if 语句更符合 Python 风格?
if not a and not b:
do_something
或
if not ( a or b ):
do something
它不是谓词逻辑,所以我应该使用 Python 关键字,因为它更具可读性对吗?
在后面的解决方案中比另一个更优化? (我不相信。)
有没有关于这方面的 PEP-8 指南?
两种方法的字节码(如果重要的话):
In [43]: def func1():
if not a and not b:
return
....:
....:
In [46]: def func2():
if not(a or b):
return
....:
....:
In [49]: dis.dis(func1)
2 0 LOAD_GLOBAL 0 (a)
3 UNARY_NOT
4 JUMP_IF_FALSE 13 (to 20)
7 POP_TOP
8 LOAD_GLOBAL 1 (b)
11 UNARY_NOT
12 JUMP_IF_FALSE 5 (to 20)
15 POP_TOP
3 16 LOAD_CONST 0 (None)
19 RETURN_VALUE
>> 20 POP_TOP
21 LOAD_CONST 0 (None)
24 RETURN_VALUE
In [50]: dis.dis(func2)
2 0 LOAD_GLOBAL 0 (a)
3 JUMP_IF_TRUE 4 (to 10)
6 POP_TOP
7 LOAD_GLOBAL 1 (b)
>> 10 JUMP_IF_TRUE 5 (to 18)
13 POP_TOP
3 14 LOAD_CONST 0 (None)
17 RETURN_VALUE
>> 18 POP_TOP
19 LOAD_CONST 0 (None)
22 RETURN_VALUE
【问题讨论】:
-
使用 Python 关键字是什么意思?您在这两种情况下都使用 Python 关键字。
-
抱歉,我的意思是 not() 语法。在我的情况下,如果我使用 not(a or b) 语法,有些东西看起来会更糟。因此,我更倾向于代码的第一个 sn-p
-
我倾向于认为'do_something'和'do something'(没有下划线)可能不同
-
因为这是最“Pythonic”的东西,所以包含字节码似乎很奇怪......另外,
a和b可能包含函数调用。
标签: python pep8 demorgans-law