Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在return语句中使用内置的all函数on list_Python_Built In - Fatal编程技术网

Python在return语句中使用内置的all函数on list

Python在return语句中使用内置的all函数on list,python,built-in,Python,Built In,我有一个方法,它需要返回多个相等性检查的结果。它是类的\uuuu eq\uuu方法的实现,它表示我的应用程序中的发声。下面是return语句的代码: return all(( self.first_language_translations == other.first_language_translations, self.first_language_phonetic_scripts == other.first_language_phonetic_scripts,

我有一个方法,它需要返回多个相等性检查的结果。它是类的
\uuuu eq\uuu
方法的实现,它表示我的应用程序中的发声。下面是return语句的代码:

return all((
    self.first_language_translations == other.first_language_translations,
    self.first_language_phonetic_scripts == other.first_language_phonetic_scripts,
    self.second_language_translations == other.second_language_translations,
    self.second_language_phonetic_scripts == other.second_language_phonetic_scripts
))
我使用
操作符测试了这种方法和另一种方法的运行时。
运算符稍快,可能为0.05秒。这似乎是合乎逻辑的,因为必须先创建这些布尔值的列表,然后运行一个函数,这可能比相应的
操作符所做的要多。然而,这可能会在我的应用程序运行时执行很多次

现在我想知道,在这种情况下使用
all
是一种好的做法还是一种坏的做法,是否值得放慢速度,是否是一种好的做法。我的应用程序都是关于声音的,可能经常需要检查声音列表中是否已经有声音或相同的声音。它不需要非常快,我认为这可能是微观优化,所以我想在这种情况下使用最佳实践


这是内置的
all
函数的一个很好的用法吗?

不,这不是
all()
的一个很好的用法,因为您需要进行一个小的、固定数量的比较,
all()
甚至不允许您比使用
时更简洁地表示它。使用
更具可读性,您应该始终将可读性放在第一位,除非您已经分析过,而且性能实际上是一个问题。也就是说,在最坏的情况下,使用
确实要快一点,平均速度甚至更快,因为它会在第一个
错误时短路,而不是每次都执行所有比较。

我认为这比只使用
更清楚。对于这样一个快速操作,您应该选择最清晰的实现。对于读者/维护人员来说,使用和几乎肯定会更快,因为一旦其中一个测试为假,它将缩短评估(即不评估后续表达式)因为一旦一个为False,整个结果就必须为False。如果该类基本上只是一个数据容器,那么您可能希望将其实现为
NamedTuple
,这样可以免费进行基于字段的相等性比较(除其他外)。@tzaman提出了一个很好的建议,我需要它们是可变的,
\uuuuu eq\uuu
方法不应该检查所有字段是否相等,而只检查一些字段,而其他字段是元数据。
all
也会短路。请参见@saulspatz,
all()
本身会短路,但在这种情况下,OP代码中的所有四个比较都将被执行以创建元组,该元组只有在传递到
all()
时才会被执行。而使用
只会执行比较,直到达到第一个
False
。Aha。你说得对。我误解了你的话。顺便说一句,我经常发现
all
for
循环更具可读性,但当然不是在这种情况下。@saulspatz,哦,当然;我经常将生成器表达式传递给
all()