1

、第6節、Modulesドキュメントストリングに依存するスクリプト? 2.7.2ドキュメントから

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.

は、スクリプトのドキュメンテーション文字列を削除する任意の場合があるのか​​もしれない論理的いくつかの依存関係やコードの機能の他の部分を壊し、構文上の誤りは無視しますか?

編集

コメントを削除するとヘルプステートメントが破損するのはなぜですか?それは通訳ではそう思わない。例えばplyについて

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

ドキュメントストリングがスクリプトから削除されている部分を除きます。あるいは、私は両方のケースを誤解していますか? – Droogans

+0

ああ、あなたが言っていることが分かります。はい、いいえ、「-OO」はバイトコードからそれを削除します。 '.py'ファイルは変更されませんが、あなたは正しいです。私は単に私の主題に関するいくつかの関連する質問の1つだったので、2つを単に関連させていました。私は通常、私の質問に私を導いたものと、最初のコメントはほとんどいつものようなものになって以来、私をそこに持っていた私の考えを書いています。 – Droogans

答えて

3

文法を記述するためにドキュメンテーション文字列を使用して字句および構文解析を行うモジュールです。ドキュメントストリングをはがすとコードが壊れてしまいます。

+0

+1それはまた私のために心に来た最初の例だった。 –

+0

+1 [PLYパーサー](http://www.manaware.net/programming-techniques/lexyaccstyle-parsing-with-ply.html)は、レクサーと同様の規則に従います。各BNFルールでは、接頭辞p_、*を持ち、docstringには一致するBNFルールが入っています*(:: =と置き換えられて:) – Droogans

1

-OOオプションは、ドキュメント文字列が格納されているかどうかにのみ影響し、解析には影響しません。たとえば、次のコードでは、として有効に最適化せずに動作します:有効にドキュメンテーション文字列の最適化を中断します

def f(): 
    'Empty docstring' 

assert f() is None 
プログラムは、ドキュメンテーション文字列の 内容に依存しているものです。ポール・ハンキンは、そのディスパッチロジックにdocstringsを使用するツールであるPlyを挙げました。もう1つの例は、 doctest moduleです。これは、docstringsの内容をテストに使用します。ここで

が有効になって -OO最適化では動作しませんコードの簡単な例です:

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

print f() 

注意ヘルプ()はまだ有効-OO最適化で動作しますが、それは機能だけを検索します引数、モジュールは含まれていますが、docstringはありません。

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

f() 
+0

セッションを模倣すると 'f()'のヘルプが表示され、 '30 + 40'タブ上に一度だけ表示され、関数名の下に印刷されます。私はPython 2.6を使用しています。 – Droogans

+0

私は以前の声明を取り戻す。 'help(f)'の表示が '.pyo'ファイル上で行われたと仮定しました。謝罪。 – Droogans

関連する問題