gpt4 book ai didi

python 性能函数 vs 生成器函数

转载 作者:行者123 更新时间:2023-11-28 21:59:19 25 4
gpt4 key购买 nike

我想知道哪一个在性能方面更好:带有状态的“常规”python 函数,还是生成器。不像similar questions ,我正在使用最简化的函数来隔离问题:

常规函数:

 >>> def counter_reg():
if not hasattr(count_regular,"c"):
count_regular.c = -1
count_regular.c +=1
return count_regular.c

生成器函数:

>>> def counter_gen():
c = 0
while True:
yield c
c += 1

>>> counter = counter_gen()
>>> counter = counter.next

在这两种情况下,调用 counter()counter_reg() 将产生相同的输出。

哪个在性能方面更好?谢谢,

最佳答案

这是一个示例,说明如何使用 timeit module 对 Python 函数进行基准测试:

测试.py:

import itertools as IT

def count_regular():
if not hasattr(count_regular,"c"):
count_regular.c = -1
count_regular.c +=1
return count_regular.c

def counter_gen():
c = 0
while True:
yield c
c += 1

def using_count_regular(N):
return [count_regular() for i in range(N)]

def using_counter_gen(N):
counter = counter_gen()
return [next(counter) for i in range(N)]

def using_itertools(N):
count = IT.count()
return [next(count) for i in range(N)]

像这样运行 python 来计时函数:

% python -mtimeit -s'import test as t' 't.using_count_regular(1000)'
1000 loops, best of 3: 336 usec per loop
% python -mtimeit -s'import test as t' 't.using_counter_gen(1000)'
10000 loops, best of 3: 172 usec per loop
% python -mtimeit -s'import test as t' 't.using_itertools(1000)'
10000 loops, best of 3: 105 usec per loop

要进行更彻底的基准测试,请尝试不同的 N 值,但在这种情况下,我认为这并不重要。

正如您所期望的,使用 itertools.countcount_regularcounter_gen 更快。​​

关于python 性能函数 vs 生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16871029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com