Python 对于较短的运行时代码,最好提前发布或使用较短的代码?
我的问题与短期运行时代码有关。例如,给定一个必须返回True或False的代码,两个代码如下: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
**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的任务是什么,所以我只做了一个类似于他的一般示例。不过还是修好了,谢谢