德摩根定律是蟒蛇的吗?



以下哪个如果语句是Pythonic?

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        

我会说,根据A和B是什么,您更容易阅读。

我认为您的两个示例都是同样可读的,但是,如果我想"将船推出",我会使用:

not any((a, b))

既然对我来说更像英语,因此是最PYTHONIC。

使用哪个?

关于哪个更有效,第一个确实会做额外的not,因此在技术上效率较低,但您在正常情况下会注意到。

它们是等效的,并且一个是否比另一个更快取决于情况(a和b的值)。

因此,只需选择最可读和/或可理解的版本即可。

我个人喜欢艾菲尔方法,放入Pythonic Form

如果A然后B: dosomething

如果a和b: dosomething

如果a为false,则第一个方法与第二种方法有所不同。在第一种情况下,它不会在第二个情况下评估B。

或等效的是"否则"

http://en.wikipedia.org/wiki/short-circuit_evaluation

和/或渴望。

,然后/否则/或短路评估

语法的好处是它的读数很好,并且不会引入新的关键字。

要使一件代码为Pythonic,它必须让读者本身(可读)和周围环境(一致)对读者感到满意。如果没有这个代码的背景,就很难发表好意见。

但是,另一方面……如果我认为我是pythonic,我将需要与周围的环境保持一致,这似乎并没有考虑到上下文(例如OP)。

顶部。

相关内容

  • 没有找到相关文章

最新更新