improve your python code(3)

数据交换时候,不推荐使用中间变量。
下面的代码中,swap1的运行速度要比swap2更快。
我们用dis模块来看一下两种代码的指令流程

#!/usr/bin/env python
# encoding: utf-8


"""
@python version: ??
@author: XiangguoSun
@contact: sunxiangguodut@qq.com
@site: http://blog.csdn.net/github_36326955
@software: PyCharm
@file: suggest3.py
@time: 5/2/2017 4:02 PM
"""


import dis


def swap1():
    x = 1
    y = 2
    x, y = y, x
    return x, y


def swap2():
    x = 1
    y = 2
    temp = x
    x = y
    y = temp
    return x, y

print(dis.dis(swap1))
print(dis.dis(swap2))

这里写图片描述
左边那一列数字是原始源代码的行号。第二列是字节码的偏移量:LOAD_CONST在第0行,STORE_FAST在第3行,以此类推。中间那列是字节的名字。它们是为程序员所准备的——解释器是完全不需要的。

最后两列告诉我们一些关于指令参数(如果有的话)的细节。第四列是参数本身。它表示一个指向代码对象其它属性的索引。在这个例子中,LOAD_CONST的参数指向列表co_consts,STORE_FAST的参数指向co_varnames。
常见指令:
LOAD_CONST 将co_consts中对应的值压栈
STORE_DEREF 解引用,设置栈中的变量值
LOAD_CLOSURE 将freevars中的对象压栈
BUILD_TUPLE 用栈帧中的元素创建元组,并压栈
BUILD_CLOSURE 创建PyFunction对象,并设置其中的f_closure域
STORE_FAST 将栈中的一个元素设置到对应的本地变量域中
RETURN_VALUE return,并且设置退出原因WHY_RETURN

上面两个程序最大的差异在于第一个用了指令ROT_TWO,交换栈顶元素。比LOAD_FAST+STORE_FAST指令更快。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值