依赖文档字符串的脚本?

发布于 2024-12-22 16:08:05 字数 757 浏览 3 评论 0原文

来自 2.7.2 文档第 6 节,模块

将两个 -O 标志传递给 Python 解释器 (-OO) 将导致字节码编译器执行优化,在极少数情况下可能会导致在出现故障的程序中。目前,只有 __doc__ 字符串从字节码中删除,从而产生更紧凑的 .pyo 文件。

这引起了我的注意:

由于某些程序可能依赖于这些可用,因此只有在您知道什么时才应该使用此选项

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

编辑

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

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

From the 2.7.2 docs, Section 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.

This got my attention:

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

Are there any cases where removing a script's docstrings might logically break some dependency or other aspect of a code's functionality, disregarding any syntactic errors?

EDIT

Why would removing comments break a help statement? It doesnt seem to do so in the interpreter.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

带上头具痛哭 2024-12-29 16:08:05

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

For example ply is a module that does lexing and parsing which uses docstrings to describe the grammar. Stripping docstrings would break the code.

听不够的曲调 2024-12-29 16:08:05

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

def f():
    'Empty docstring'

assert f() is None

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

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

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

print f()

注意 help() 仍可与 -OO 一起使用启用优化,但它只会找到函数名称、参数和模块,但不会找到文档字符串:

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

f()

The -OO option only affects whether a doc string is stored -- it does not affect parsing. For example the following code works with and without optimizations enabled:

def f():
    'Empty docstring'

assert f() is None

The programs that will break with the docstring optimization enabled are ones that rely on the contents of the docstring. Paul Hankin mentioned Ply which is tool that uses docstrings for its dispatch logic. Another example is the doctest module which uses the contents of docstrings for tests.

Here's a simple example of code that won't work with the -OO optimization enabled:

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

print f()

Note help() will still work with the -OO optimization enabled, but it will only find the function name, arguments, and module, but not the docstring:

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

f()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文