Python 对于较短的运行时代码,最好提前发布或使用较短的代码?

Python 对于较短的运行时代码,最好提前发布或使用较短的代码?,python,optimization,standards,Python,Optimization,Standards,我的问题与短期运行时代码有关。例如,给定一个必须返回True或False的代码,两个代码如下: **Type 1:** bool = False for item in items: if item (condition1): if item (condition2): bool = True else: bool = False

我的问题与短期运行时代码有关。例如,给定一个必须返回True或False的代码,两个代码如下:

        **Type 1:**
    bool = False
    for item in items:
        if item (condition1):
            if item (condition2):
                 bool = True
            else:
                bool = False
     return bool  



    **Type 2:**
    bool = False
    for item in items:
        if item (condition1):
            if item (condition2):
                bool = True
            else:
                bool = False
                break  
        else: 
            bool = False
            break 
    return bool  
如果两个代码在运行时相似,那么哪一个代码被认为是“更好”还是“更标准”?第一个自然地执行与第二个相同的工作,但迭代整个对象“items”。第二个循环在条件不满足时立即退出循环,从而以更多的代码行完成相同的工作,但由计算机完成的步骤更少


这是一个简单的例子,但我也要求使用更复杂的代码,问题仍然是:“我是让它完成循环还是中断(可能是多个)循环?”

中断总是更好-您可以节省时间并避免不必要的迭代

但是,您可以考虑在函数的末尾添加另一个<代码>返回<代码>,以确保它在终止时返回假(或truthy)值,并且仅在满足条件时返回,否则您将在第一次迭代中返回值,如示例1。 您还应该避免在没有附加值的情况下使用

else
s,因为它们不是强制性的,只是为了帮助您。此外,如果您没有进一步的分支,请将条件分组-您不需要将要一起满足的条件过于复杂

以下是我将如何完成这项任务:

def foo (items):
    for item in items:
        if not item (condition1) or not item (condition2):
             return False
    return True

突破总是更好的-您可以节省时间并避免不必要的迭代

但是,您可以考虑在函数的末尾添加另一个<代码>返回<代码>,以确保它在终止时返回假(或truthy)值,并且仅在满足条件时返回,否则您将在第一次迭代中返回值,如示例1。 您还应该避免在没有附加值的情况下使用

else
s,因为它们不是强制性的,只是为了帮助您。此外,如果您没有进一步的分支,请将条件分组-您不需要将要一起满足的条件过于复杂

以下是我将如何完成这项任务:

def foo (items):
    for item in items:
        if not item (condition1) or not item (condition2):
             return False
    return True

考虑这一点的一种方法是权衡哪个对特定项目更重要:开发人员的时间,还是计算机的时间

第二种选择编写起来(稍微)复杂一些,推理起来也稍微复杂一些,调试起来可能更困难一些。您可能只想在需要时这样做


我的经验法则是尽可能简单地编写代码(这可以最大限度地减少开发时间,并减少bug的数量)。如果代码太慢,那么我会考虑改变代码以提高性能的方法。

考虑这一点的一种方法是权衡哪个对特定项目更重要:开发人员的时间,还是计算机的时间

第二种选择编写起来(稍微)复杂一些,推理起来也稍微复杂一些,调试起来可能更困难一些。您可能只想在需要时这样做


我的经验法则是尽可能简单地编写代码(这可以最大限度地减少开发时间,并减少bug的数量)。如果代码太慢,那么我会研究更改代码以提高性能的方法。

您的代码可以压缩为一个简单的
all
调用,该调用会短路(类似于带有
break
的版本):


第一个
确保iterable不是空的,因为根据您的代码,空iterable将返回
False

您的代码可以压缩为一个简单的
all
调用,该调用会短路(类似于带有
break
的版本):


第一个
确保iterable不是空的,因为根据您的代码,空的iterable将返回
False

两个版本看起来都不正确。@user2357112我有两个正是这种格式的代码,它们都可以工作……这些只是框架,还有其他问题,第一个版本
在第一次迭代时立即返回
s。你是如何初始化
bool=False
的,这也是值得怀疑的,因为它看起来更像是一个“全部”检查,而不是一个“任何”检查。这通常是错误的做法。
返回项和全部(条件1(i)和条件2(i)用于项中的i)
两个版本看起来都不正确。@user2357112我有两个格式完全相同的代码,它们都可以工作……这些只是框架。除其他问题外,第一个版本
在第一次迭代时立即返回。你是如何初始化
bool=False
的,这也是值得怀疑的,因为它看起来更像是一个“全部”检查,而不是一个“任何”检查。这样做通常是错误的。
返回项目和全部(条件1(i)和条件2(i)用于项目中的i)
注意您的代码如何在
True
上停止,而问题的类型2在
False
上停止。这可能是也可能不是正确的行为;我不相信问题的任何代码都是正确的。@user2357112不太清楚OP的任务是什么,所以我只做了一个类似于他的一般示例。但是不管怎样,还是修复了这个问题,感谢您的代码如何在
True
上停止,而问题的类型2在
False
上停止。这可能是也可能不是正确的行为;我不相信问题的任何代码都是正确的。@user2357112不太清楚OP的任务是什么,所以我只做了一个类似于他的一般示例。不过还是修好了,谢谢