[英]Async DNS query function can only be called once per session
[英]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.