Ada*_*wis 7 python compilation built-in
在查看Python内置函数列表时,我很难理解该方法的用处compile.我能找到的所有例子都指向一个简单的"你好世界".是否有意义什么它,而不是在使用它.
这与Python用于生成.pyc文件的方法相同吗?
这可以用来删除Python的一些动态特性,以提高某些代码块的性能吗?(完全清楚C中的模块是预编译模块的方法.)
从这里:Python中的eval,exec和compile有什么区别?:
compile是水平较低版本exec和eval.它不会执行或评估您的语句或表达式,而是返回可以执行此操作的代码对象.模式如下:
compile(string, '', 'eval')返回已经执行过的代码对象eval(string).请注意,您不能在此模式下使用语句; 只有(单个)表达式有效.compile(string, '', 'exec')返回已经执行过的代码对象exec(string).您可以在此处使用任意数量的语句.compile(string, '', 'single')就像exec模式一样,但它会忽略除第一个语句之外的所有内容.请注意,带有结果的if/ elsestatement被视为单个语句.更新:
什么时候编译Python?
通常,您编译Python以利用性能.编译代码的启动时间要快得多,因为它不需要编译,但运行速度不快.
最值得注意的是,compile如果您想手动将代码转换为字节码,则可以使用.这提出了另一个重要但相关的问题为什么这样做?
正如这篇华丽文章中所提到的:
如果你想使用exec并计划多次执行该代码,请确保先将其编译为字节码,然后仅执行该字节码,并仅在新字典中作为命名空间.
特别值得注意的是:
现在执行字节码比创建字节码和执行字节码要快多少?:
$ python -mtimeit -s'code ="a = 2; b = 3; c = a*b"''exec code'10000循环,最佳3:22.7 usec per loop
$ python -mtimeit -s'code = compile("a = 2; b = 3; c = a*b",
"","exec")''exec code'1000000循环,最佳3:0.765 usec per loop对于一个非常短的代码示例,速度快32倍.你拥有的代码越多,情况就越糟糕.为什么会这样?因为与评估字节码相比,解析Python代码并将其转换为字节码是一项昂贵的操作.那当然也会影响
execfile哪些完全不使用字节码缓存,应该怎么做..pyc如果您将路径传递给文件,则不会神奇地检查是否存在foo.py文件.
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |