如何缩短代码?

时间:2013-11-19 09:33:16

标签: python

我有一个字典,我需要通过我的函数检查所有值(此函数不能更改)。 代码:

if func(arg, dict['a']) and func(arg, dict['b']) and func(arg, dict['c']) and func(arg, dict['d']): 
    pass

如何缩短if语句?

感谢。

4 个答案:

答案 0 :(得分:9)

使用all

if all(func(arg, my_dict[k]) for k in my_dict):
  ...

请勿将dict用作变量名称。

答案 1 :(得分:5)

您可以使用all这样的功能

if all(func(arg, value) for value in myDict.values()):
    ...

注意:切勿将内置类型名称用作变量名称。在您的情况下,dict是内置类型和函数的名称。这就是为什么我有myDict

示例运行

def func(arg, value):
    return value

myDict = {}.fromkeys(list("abcd"), True)
if all(func("", value) for value in myDict.values()):
    print "All TRUE"

<强>输出

All TRUE

答案 2 :(得分:1)

完整性,功能性方法。 (最好使用imap而不是Python2的地图)

from functools import partial
if all(map(partial(func, arg), my_dict.values()):
    ...

答案 3 :(得分:1)

使用allany的当前代码和大多数解决方案将在找到第一个False值后立即停止评估dict中的条目(此功能称为“短路”)。如果必须为dict中的每个值调用func,并且func返回True或False(即,您不依赖于Python对非bool类型的bool解释),然后你可以使用sum

if sum(func(arg, my_dict[k]) for k in my_dict) == len(my_dict):

这使用了True与1和False的Python等价与0。

如果func返回非bool值,则将func的调用包裹为bool

if sum(bool(func(arg, my_dict[k])) for k in my_dict) == len(my_dict):