当函数只能调用一次

时间:2014-08-26 00:19:58

标签: python

它的方式我每次迭代只能调用funct()一次。所以我不能这样做:

result=[funct(arg) for arg in args if arg and funct(arg)] 

如果有连接丢弃,则此函数返回None。如果返回None,我不想将其添加到结果列表中。如何实现呢?

def funct(arg):
    if arg%2: return arg*2

args=[1,2,3,None,4,5]

result=[funct(arg) for arg in args if arg] 
print result

2 个答案:

答案 0 :(得分:2)

您可以使用过滤器,因为您不会将任何0值返回到列表中:

result = filter(None,map(funct,filter(None,args)))

它会过滤您的args列表以及返回的任何None

在包含20个元素的列表中:

In [18]: %%timeit                   

[val for arg in args
              if arg                 
              for val in [funct(arg)]
              if val is not None]
   ....: 
100000 loops, best of 3: 10.6 µs per loop

In [19]: timeit filter(None,map(funct,filter(None,args)))
100000 loops, best of 3: 6.42 µs per loop

In [20]: timeit [a for a in [funct(arg) for arg in args if arg] if a]

100000 loops, best of 3: 7.98 µs per loop

答案 1 :(得分:1)

你可以嵌套理解

result=[a for a in [funct(arg) for arg in args if arg] if a]