回答:
何が問題になっていself.left = Noneますか?
null、PHPとは異なりnull、PHPで変数をに設定すると、ほとんどの場合、そもそも変数を定義していない場合と同様の動作になります。NonePython のの値は、未定義の変数とはかなり異なります。ただし、None他のほとんどの化身とまったく同じですnull(少なくとも、より不可解な詳細に入るまで)。
None不特定のタイプの他の「プレーン」オブジェクトで実行できることで何でも実行できます。コンテナに保存し、その文字列表現を印刷し、そのメタデータを確認します...とにかく、「python null」でGoogleを試しましたか同等」私は真剣です; 少し分析が必要になりますが、情報はそこにあります。
print x入力し、Enter キーを押します。未定義の変数を出力しようとすると、ほとんどの言語と同様に、インタープリターエラーが発生します。しかし、変数を定義してから、Noneでそれをクリアしようとすると、print xコードを使用すると、単語Noneが出力として生成されます。私はpythonに慣れていないので誤解される可能性がありますが、これはクリアされた変数の動作のようには見えません。
delキーワードが行うだろう。
>>> a=1
>>> a
1
>>> del a
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
しかし、この場合、私は投票します self.left = None
delまた、存在しない変数を削除しようとすると、通常は望ましくない例外がスローされるという欠点もあります。
type=… タイプするつもりだったときにtype(…)削除すると、元の機能に戻す最も簡単な方法であることを指摘したいと思います。つまり、Noneのままにしておくと、基になる関数へのアクセスが遮断されます。
set = set(myList)て、関数(doh)としてsetをもう使用できないことに気付きました。をdel set使用すると、fxとして再び使用できました。もちろん、実際のスクリプトではその予約済み変数を使用することはありません。
var = None 「値をクリア」して、変数の値を「None」の値のように「null」に設定しますが、変数へのポインタは残ります。
del var 変数の定義を完全に削除します。
後で変数を使用する場合、たとえば、変数に新しい値を設定する、つまり変数を保持するNoneほうがよいでしょう。
実際には、それは変数/プロパティを削除しません。実行するのはその値をNoneに設定することだけなので、変数はメモリ内の領域を占有します。変数のすべての存在をメモリから完全に消去したい場合は、次のように入力できます。
del self.left
clearいませんremove。delは属性とルックアップを強制終了します。これをNoneに設定することは、あなたがチェックできるよりもクリーンでif self.left、ノードが空かどうかをチェックするのに十分です。
del、IMHOは、変数を '精神的に解析するときに忘れられる可能性があることをより明確にすることを検討する価値があります' コード。
if self.left:、をチェックしますか、それとも、どこでも処理しないとプログラムがクラッシュする可能性のあるNameError例外を処理しますか? ?
それを完全に削除したい場合は、以下を使用してdelください:
del your_variable
それ以外の場合は、値を作成するNone:
your_variable = None
それはだ場合は反復可能(リストやタプルなど)、あなたはそれは次のように空にすることができます。
your_variable.clear()
その後your_variable、空になります
変数を削除しますか?
わかりました、@ bnulの答えに対する最善の代替案があると思います。
あなたは個々の名前を削除することができますdel:
del x
または、globals()オブジェクトから削除することもできます。
for name in dir():
if not name.startswith('_'):
del globals()[name]
これは単なるループの例です。防御的に削除するのは、アンダースコアで始まらない名前のみであり、インタープリターの最初にアンダースコアのない名前のみを使用したという(不当ではない)仮定をします。本当に徹底したい場合は、ハードコーディングされた名前のリストを使用して、代わりに保持できます(ホワイトリスト)。インタープリターを終了して再起動する以外に、クリアを実行する組み込み関数はありません。
インポートしたモジュール(import os)は、sys.modulesによって参照されるため、インポートされたままになります。以降のインポートでは、すでにインポートされているモジュールオブジェクトが再利用されます。現在のグローバル名前空間では、それらへの参照がありません。
この回答を再検討してください!
私は上記のいくつかのオプションを使用しました:
del self.left
または値をNoneに設定して
self.left = None
値をNoneに設定する場合は、違いを理解し、いくつかの例外ハンドラーを配置することが重要です。テンプレートを使用して条件ステートメントの値を出力する場合は、次のようにします。
print("The value of the variable is {}".format(self.left))
変数の値が「変数の値はなし」と表示されている場合があります。したがって、いくつかの例外ハンドラをそこに置く必要があります:
if self.left:
#Then only print stuff
上記のコマンドは、self.leftが存在しない場合にのみ値を出力します None