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.

構文エラーを無視して、スクリプトの docstring を削除すると、コードの機能の依存関係やその他の側面が論理的に壊れる可能性がある場合はありますか?

編集

コメントを削除するとヘルプ ステートメントが壊れるのはなぜですか? インタプリタではそうではないようです。

>>> 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は、文法を記述するために docstring を使用する字句解析と解析を行うモジュールです。docstring を削除すると、コードが壊れてしまいます。

于 2011-12-24T17:11:04.677 に答える
1

この-OOオプションは、doc 文字列が保存されるかどうかにのみ影響し、解析には影響しません。たとえば、次のコードは、最適化が有効になっていても有効になっていない場合でも機能します。

def f():
    'Empty docstring'

assert f() is None

docstring の最適化を有効にすると壊れるプログラムは、docstring の内容に依存するプログラムです。Paul Hankin は、ディスパッチ ロジックに docstring を使用するツールである Ply について言及しました。もう 1 つの例は、docstring の内容をテストに使用するdoctest モジュールです。

-OO最適化を有効にすると機能しないコードの簡単な例を次に示します。

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

print f()

help()-OO最適化を有効にしても機能しますが、関数名、引数、およびモジュールのみを検出し、docstring は検出しないことに注意してください。

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

f()
于 2011-12-24T17:40:26.513 に答える