今天在看 python2 与 python3 的区别的时候,发现:print 在 python2 中是语句,而在 python3 中是函数,那底层上的区别是什么?通过查看生成出来的字节码找到了答案:python2 直接用指令来支持的,而 python3 调用了函数。
查看字节码除了下面展示的用 python 自带的 dis 模块,也可以用这个网站:compiler explorer,当前它只支持 python3,btw,也不支持 lua,不过它对 c++ 的支持是特别完善的,支持各种类型的编译器。lua 可以通过 luac -l -p <文件名>
来查看,或者使用这个网站:Lua Bytecode Explorer。
python2
def hello():
print 200
import dis
dis.dis(hello)
显示的结果是:
2 0 LOAD_CONST 1 (200)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
python3
def hello():
print(200)
import dis
dis.dis(hello)
显示的结果是:
2 0 LOAD_GLOBAL 0 (print)
2 LOAD_CONST 1 (200)
4 CALL_FUNCTION 1
6 POP_TOP
8 LOAD_CONST 0 (None)
10 RETURN_VALUE