17

組み込みモジュールを使用していくつかのインスタンスを挿入しているので、デバッグ目的でグローバルにアクセスできます。モジュールの問題__builtins__は、それがメイン スクリプト内のモジュールであり、モジュール内の dict であることですが、場合によっては私のスクリプトがメイン スクリプトまたはモジュールになる可能性があるため、これを行う必要があります。

if isinstance(__builtins__, dict):
    __builtins__['g_frame'] = 'xxx'
else:
    setattr(__builtins__, 'g_frame', 'xxx')

これより短い回避策はありますか?さらに重要なことに、なぜ は__builtins__このように振る舞うのでしょうか?

これを確認するためのスクリプトを次に示します。モジュール a.py を作成します。

#module-a
import b
print 'a-builtin:',type(__builtins__)

モジュール b.py を作成します。

#module-b
print 'b-builtin:',type(__builtins__)

次に、python a.py を実行します。

$ python a.py 
b-builtin: <type 'dict'>
a-builtin: <type 'module'>
4

1 に答える 1

16

モジュールが必要だと思います__builtin__(単数形に注意してください)。

ドキュメントを参照してください:

27.3. __builtin__— 組み込みオブジェクト

CPython 実装の詳細:ほとんどのモジュールには、グローバルの一部として使用できる名前__builtins__( に注意してください) があります。's'の値__builtins__は通常、このモジュールまたはこのモジュールの [sic]__dict__属性の値です。これは実装の詳細であるため、Python の代替実装では使用されない場合があります。

于 2009-07-26T08:25:03.193 に答える