【问题标题】:Which is better in python? [closed]python哪个更好? [关闭]
【发布时间】:2014-07-26 00:57:43
【问题描述】:

我在 python 中使用了一些条件语句,它们给出了相同的结果。我想知道哪个更好,它们之间在性能和逻辑上有什么区别。

案例一:

if a and b and c:
    #some action

对比

if all( (a, b, c) ):
    #some action

案例2:

if a or b or c:
    #some action

对

if any( (a, b, c) ):
    #some action

案例3:

if not x in a:
    #some action

对

if x not in a:
    #some action

在上述情况下,我想知道性能和逻辑上的差异以及首选方式。

【问题讨论】:

  • 有什么区别?速度、逻辑、可读性……?
  • @Tichodromamuraria 编辑了问题。

标签: python conditional-statements


【解决方案1】:

案例 1

来自https://docs.python.org/2/library/functions.html#all

所有(可迭代)

如果可迭代对象的所有元素都为真,则返回真(或 如果可迭代为空)。相当于:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

这意味着if a and b and c: 和if all( (a, b, c) ): 做同样的事情(duh),但all() 涉及函数调用和循环,所以它肯定会慢一点,但实际上只是一点点。

如果您只有几个变量(不超过 3 个),我会说您使用 if a and b and c: 以保持可读性,如果您有更多变量,则使用 all()。

请记住:可读性几乎总是比性能提升更重要。

all() 和 any() 可以将列表理解作为输入,这非常有用。

注意:all() 仅适用于 Python 2.5+


案例 2

确实与案例 1 相同。因为几乎是一模一样的功能

任何(可迭代)

如果可迭代的任何元素为真,则返回真。如果 可迭代对象为空,返回 False。相当于:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

注意:any() 仅适用于 Python 2.5+


案例 3

来自http://legacy.python.org/dev/peps/pep-0008/#programming-recommendations

使用 is not 运算符而不是 not ... is。虽然这两个表达式在功能上是相同的,但前者更易读,更受欢迎。

你应该使用if x not in a: 而不是if not x in a:,因为样式指南是神圣的

【讨论】:

  • 我想补充一点,在前两种情况下,如果我们已经有一个可迭代对象,我们应该使用any 或all,因为如果我们有单独的元素,则转换时会产生额外的成本它们可以迭代。
  • @AnkurAnkan 是的,我想我的意思是说它可以将 LC 作为输入 :-)
  • 这回答了我的问题。谢谢。
  • @TimCastelijns 我喜欢你的说法“因为风格指南是神圣的”。但是我父亲告诉我一条规则,它简化了(相当复杂的)捷克语语法——尝试所有你最先想到的选项,然后选择一个对你来说听起来最自然的选项。这假设您是母语人士,所以唯一要做的就是努力成为母语 Python。
  • @JanVlcinsky 唯一要做的就是努力成为 Python 的母语使用者 努力做到这一点 ;-) 同时,我只想遵循官方风格指南 :- )
猜你喜欢
  • 2013-06-28
  • 2013-06-10
  • 1970-01-01
  • 2011-03-06
  • 2011-03-19
  • 2011-01-05
  • 2014-09-06
  • 2010-11-24
  • 2011-02-14
相关资源
最近更新 更多