Pio*_*ski 11 python function python-2.7
为什么python试图计算p定义期间的值?定义此功能需要很长时间.
def f():
raise Exception('Some error')
p = 2322111239**42322222334923492304923
print 'Defined!'
Run Code Online (Sandbox Code Playgroud)
另外,如果p在定义期间计算值,为什么可以无错误地定义此函数?
def f():
return 4
p = 11/0
Run Code Online (Sandbox Code Playgroud)
这个显然工作正常,因为不涉及常量:
def f():
raise Exception('Some error')
x=42322222334923492304923
p = 2322111239**x
print 'Defined!'
Run Code Online (Sandbox Code Playgroud)
它是窥视孔优化器:
http://hg.python.org/cpython/file/eabff2a97b5b/Python/peephole.c#l88
特别参见第104-106行
case BINARY_POWER:
newconst = PyNumber_Power(v, w, Py_None);
break;
Run Code Online (Sandbox Code Playgroud)
目的是以更慢的定义(读取:导入)时间为代价加速函数的运行时执行.这是有道理的,因为你只需要编译一次该函数的代码,但你可能需要多次调用它.
我相信优化器是由Raymond Hettinger编写的,他对SO非常活跃,也许他可以证实我的说法.