python 跳出函数迭代_Python中的迭代函数

有几种方法可以优化此代码:

>使用itertools.repeat(None,times)控制循环次数更快(这可以避免在每次迭代时创建新的,未使用的整数对象).

>您可以通过将其置于函数或生成器中来获得速度(局部变量比全局变量更快.

>您可以通过将中间结果保存在变量中来获得速度,避免[-1]索引查找(LOAD_FAST / STORE_FAST比LOAD_CONST -1和BINARY_SUBSCR更快).

>您可以使用预绑定方法而不是y.append来提高速度.

例如:

from itertools import repeat

def nest(func, x, times):

result = [x]

result_append = result.append

for _ in repeat(None, times):

x = func(x)

result_append(x)

return result

这是一个示例调用:

>>> def double(x):

return 2 * x

>>> nest(double, 3, 5)

[3, 6, 12, 24, 48, 96]

这是反汇编显示紧密内循环,使用局部变量和绑定方法:

>>> from dis import dis

>>> dis(nest)

2 0 LOAD_FAST 1 (x)

3 BUILD_LIST 1

6 STORE_FAST 3 (result)

3 9 LOAD_FAST 3 (result)

12 LOAD_ATTR 0 (append)

15 STORE_FAST 4 (result_append)

4 18 SETUP_LOOP 45 (to 66)

21 LOAD_GLOBAL 1 (repeat)

24 LOAD_CONST 0 (None)

27 LOAD_FAST 2 (times)

30 CALL_FUNCTION 2

33 GET_ITER

>> 34 FOR_ITER 28 (to 65)

37 STORE_FAST 5 (_)

5 40 LOAD_FAST 0 (func)

43 LOAD_FAST 1 (x)

46 CALL_FUNCTION 1

49 STORE_FAST 1 (x)

6 52 LOAD_FAST 4 (result_append)

55 LOAD_FAST 1 (x)

58 CALL_FUNCTION 1

61 POP_TOP

62 JUMP_ABSOLUTE 34

>> 65 POP_BLOCK

7 >> 66 LOAD_FAST 3 (result)

69 RETURN_VALUE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值