1

来自 2.7.2 文档,第 6 节Modules

Passing two -O flags to the Python interpreter (-OO) will cause the bytecode compiler to perform optimizations that could in some rare cases result in malfunctioning programs. Currently only __doc__ strings are removed from the bytecode, resulting in more compact .pyo files.

这引起了我的注意:

Since some programs may rely on having these available, you should only use this option if you know what you’re doing.

在任何情况下,删除脚本的文档字符串可能会在逻辑上破坏代码功能的某些依赖性或其他方面,而忽略任何语法错误?

编辑

为什么删除评论会破坏帮助声明?在解释器中似乎没有这样做。

>>> help('import_pi')

Help on module import_pi:

NAME
    import_pi

FILE
    /home/droogans/py/import_pi.py

FUNCTIONS
    print_pi()

DATA
    pi = 3.1415926535897931


>>> import import_pi()
>>> import_pi.__doc__
>>>
>>> print import_pi.print_pi.__doc__
Convert a string or number to a floating point number, if possible.
4

2 回答 2

3

例如ply是一个进行词法分析和解析的模块,它使用文档字符串来描述语法。剥离文档字符串会破坏代码。

于 2011-12-24T17:11:04.677 回答
1

-OO选项仅影响是否存储文档字符串——它不影响解析。例如,以下代码在启用和不启用优化的情况下均有效:

def f():
    'Empty docstring'

assert f() is None

启用文档字符串优化后会中断的程序是依赖文档字符串内容的程序。Paul Hankin 提到了 Ply,它是使用文档字符串作为其调度逻辑的工具。另一个例子是doctest 模块,它使用 docstrings 的内容进行测试。

-OO这是一个简单的代码示例,它在启用优化的情况下不起作用:

def f():
    '30 + 40'
    return eval(f.__doc__)

print f()

注意help()仍然可以在-OO启用优化的情况下工作,但它只会找到函数名、参数和模块,而不是文档字符串:

>>> help(f)
Help on function f in module __main__:

f()
于 2011-12-24T17:40:26.513 回答