python 中m op n运算_计算能力的速度(在Python中)

54584f850001c0bc02200220-100-100.jpg

12345678_0001

在指数检查中执行此操作将放慢某些情况,因为它不是非常简单的2的幂,因此不一定是胜利。但是,在预先知道指数的情况下(例如使用文字2),可以通过简单的窥孔优化来优化生成的字节码。大概这根本不值得做(这是一个相当具体的情况)。这是进行这种优化的概念的快速证明(可用作装饰器)。注意:您将需要字节播放模块来运行它。import byteplay, timeitdef optimise(func):    c = byteplay.Code.from_code(func.func_code)    prev=None    for i, (op, arg) in enumerate(c.code):        if op == byteplay.BINARY_POWER:            if c.code[i-1] == (byteplay.LOAD_CONST, 2):                c.code[i-1] = (byteplay.DUP_TOP, None)                c.code[i] = (byteplay.BINARY_MULTIPLY, None)    func.func_code = c.to_code()    return funcdef square(x):    return x**2print "Unoptimised :", timeit.Timer('square(10)','from __main__ import square').timeit(10000000)square = optimise(square)print "Optimised   :", timeit.Timer('square(10)','from __main__ import square').timeit(10000000)给出时间:Unoptimised : 6.42024898529Optimised   : 4.52667593956[编辑] 实际上,再考虑一下,有一个很好的理由说明未完成此优化。不能保证有人不会创建用户定义的类来覆盖__mul__and __pow__方法,并为每个方法做不同的事情。安全地执行此操作的唯一方法是,如果可以保证堆栈顶部的对象是具有相同结果“ x **2”和“ x*x”的对象,但是解决该问题要困难得多。例如。在我的示例中,这是不可能的,因为任何对象都可以传递给Square函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值