1. ホーム
  2. パイソン

[解決済み] Pythonスクリプトの途中ですべての変数をクリアするにはどうすればよいですか?

2022-03-03 12:51:06

質問

Matlabの'clear'に似たものを探しています。ワークスペースからすべての変数を削除し、システムメモリからそれらを解放するコマンド/関数です。Pythonにそのようなものはありますか?

EDIT: ある時点ですべての変数をクリアするスクリプトを書きたいのですが、どうすればいいですか?

どのように解決するのですか?

以下の一連のコマンドで削除されます。 あらゆる という名前を現在のモジュールから削除します。

>>> import sys
>>> sys.modules[__name__].__dict__.clear()

なぜなら、"every name"にはすべてのビルトインが含まれるので、このように完全に消去された後にできることはあまりないからです。 Pythonには変数というものがないことを思い出してください。 オブジェクト モジュール、関数、クラス、数値、文字列、...など)、そして 名前 このシーケンスが行うのは、モジュールからすべての名前を削除することです(対応するオブジェクトは、それらへのすべての参照が削除された場合にのみ、消滅します)。

もっと厳選したいのかもしれませんが、もっと具体的に言わないと正確に推測するのは難しいです。 でも、一応、例を挙げておくと

>>> import sys
>>> this = sys.modules[__name__]
>>> for n in dir():
...   if n[0]!='_': delattr(this, n)
... 
>>>

このシーケンスでは、プライベートや魔法のような名前だけを残し、その中には __builtins__ という特殊な名前で、すべての組み込み名を収容しています。 ですから、ビルトインはまだ機能します -- 例えば。

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'n']
>>> 

ご覧の通り、名前 n (その中の制御変数 for の中で再バインドされているため)、たまたまその辺に張り付いているのです。 for という名前にしたほうがいいかもしれません。 _ 例えば、quot;それは特別なものであることを明確に示すために(さらに、インタラクティブ・インタープリタでは、名前 _ は、プロンプトで式を完全に入力するたびに、その式の値に再バインドされるので、長くは残りません;-)。

とにかく そのための関数を定義し、スタートアップファイル(対話型セッションでのみ使用する場合)またはサイトカスタマイズファイル(すべてのスクリプトで使用する場合)に記述することは難しくありません。