簡體   English   中英

當函數只能被調用一次

[英]When function can only be called once

這樣,我每次迭代只能調用一次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

您可以使用過濾器,因為您將不會向列表返回任何0值:

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

它將過濾您的args列表,並返回所有None

在包含20個元素args的列表中:

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

你可以嵌套理解

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM