依赖于Docstrings的脚本?

时间:2011-12-24 17:07:44

标签: python compiler-optimization removing-whitespace docstring

从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.

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

-OO选项仅影响是否存储文档字符串 - 它不会影响解析。例如,以下代码可以启用和不启用优化:

def f():
    'Empty docstring'

assert f() is None

将启用文档字符串优化的程序是依赖于docstring的内容的程序。 Paul Hankin提到Ply是一种使用docstrings作为其调度逻辑的工具。另一个例子是doctest module,它使用docstrings的内容进行测试。

以下是一个简单的代码示例,它不适用于-OO优化启用:

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

print f()

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

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

f()