improve your python code(3)

来源:互联网 发布:服装店收银软件破解版 编辑:程序博客网 时间:2024/05/25 08:13

数据交换时候,不推荐使用中间变量。
下面的代码中,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 disdef swap1():    x = 1    y = 2    x, y = y, x    return x, ydef swap2():    x = 1    y = 2    temp = x    x = y    y = temp    return x, yprint(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指令更快。

0 0
原创粉丝点击