我有两个函数,它们从API调用返回相同的结果。函数1比函数2慢1.5倍,我不明白为什么?我也想优化最好的一个
职能1:
def get_pmid(df):
pmid = []
for doi in tqdm(df['DOI'].values):
try:
if convert.doi2pmid(doi) not in ['AMBIGUOUS', 'NOT_FOUND;INVALID_JOURNAL']:
pmid.append(convert.doi2pmid(doi))
else:
pmid.append(None)
except:
pmid.append(None)
time.sleep(uniform(0.6, 1.2))
return pmid
职能2:
def get_pmid_2(df):
pmid = []
for doi in tqdm(df['DOI']):
try:
pmid.append(convert.doi2pmid(doi))
except:
pmid.append(None)
time.sleep(uniform(0.6, 1.2))
for x, y in enumerate(pmid):
if y in ['AMBIGUOUS', 'NOT_FOUND;INVALID_JOURNAL']:
pmid[x] = None
return pmid
大概
convert.doi2pmid(doi)
是一个相对昂贵的电话。当结果不是两个排除的结果之一时,您的第一个示例将计算它两次。计算它一次,存储它,然后测试(如果合适的话)append
存储的值。walrus操作符的一个不错的用例,:=
:为什么第一个函数比第二个慢?
convert.doi2pmid
两次,而不是每次迭代调用一次李>except
而不指定预期的异常是一种不好的做法。(不影响性能)如何优化此功能?
第二种算法具有线性时间复杂度,因此它已经设计得很好
相关问题 更多 >
编程相关推荐