42

インタラクティブな Python セッションで変数名として使用して誤って上書きしてしまいました - セッションを再起動せずにset元の関数にアクセスする方法はありますか?set

(私はそのセッションで非常に多くのものを持っているので、それをする必要はありませんが、もちろん必要に応じて行うことができます.)

4

3 に答える 3

71

ビルトインをマスクしている名前を削除するだけです:

>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>

builtins モジュールを介して元のビルトインにいつでもアクセスできます ( __builtin__Python 2 では、アンダースコアと no を使用s)。ビルトインをオーバーライドしたいが、オーバーライドからオリジナルのままにしたい場合は、これを使用してください。

>>> import builtins
>>> builtins.set
<type 'set'>

マスキング名が定義されている場所を見つけるのに問題がある場合は、現在の名前空間から組み込みまでのすべての名前空間を確認してください。スコープ規則の簡単な説明を参照してください。現在の状況にどの範囲が適用されるかについて。

于 2013-06-17T16:52:20.693 に答える
7

使用できます__builtin__

>>> import __builtin__
>>> __builtin__.set
<type 'set'>

または単に(インポートは必要ありません):

>>> __builtins__.set
<type 'set'>

Python 3 の場合:

>>> import builtins
>>> builtins.set
<class 'set'>

ドキュメントから:

CPython 実装の詳細: ユーザーは触れないでください__builtins__。これは厳密には実装の詳細です。builtins名前空間の値をオーバーライドしたいユーザーは、 __builtin__('s' がない) モジュールをインポートし、その属性を適切に変更する必要があります。

于 2013-06-17T16:51:17.740 に答える