我一直认为 Python 解释器在没有-O
标志的情况下没有进行任何优化,但以下内容有点奇怪:
>>> def foo():
... print '%s' % 'Hello world'
...
>>> from dis import dis
>>> dis(foo)
2 0 LOAD_CONST 3 ('Hello world')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
似乎解释器正在对两个字符串常量的模进行一些折叠。如果我添加一个变量,它会给出一个未优化的结果:
>>> def foo():
... s = 'Hello world!'
... print '%s' % s
...
>>> dis(foo)
2 0 LOAD_CONST 1 ('Hello world!')
3 STORE_FAST 0 (s)
3 6 LOAD_CONST 2 ('%s')
9 LOAD_FAST 0 (s)
12 BINARY_MODULO
13 PRINT_ITEM
14 PRINT_NEWLINE
15 LOAD_CONST 0 (None)
18 RETURN_VALUE
没有 -O 标志,Python 做了哪些优化?有没有办法禁用它们?我想看看未优化的 Python 字节码的外观。我不打算在任何生产类型的环境中这样做。