2015-01-15 18 views
5

私はPythonを初めて使いました。私はいくつかのコードスニペットで少し演奏しています。Pythonで初期化された変数を確認してください

私は変数の初期化のためにチェックする必要があると私はこのイディオムを使用していた私のコードで

if my_variable: 
    # execute some code 

が、私は、この他のイディオムが使用されていいくつかの記事読んだ:

if my_variable is not None: 
    # execute some code 

は、彼らは同じですまたはいくつかの意味的な違いがありますか?

答えて

5
Python documentation on boolean operationsを引用

、ブール演算の文脈において

、及び式が制御フロー文で使用される場合にも、以下の値が偽として解釈される:FalseNone、全ての数値ゼロ空文字列とコンテナ(文字列、タプル、リスト、辞書、セット、フーチェンセットを含む)その他の値はすべてtrueと解釈されます。 my_variable第二つmy_variableNone場合にのみ失敗するように上記falsy値のいずれかを有する場合

そこで、if my_variableは、失敗します。通常、変数はプレースホルダ値としてNoneで初期化され、プログラムのある時点でNoneでなければ、他の値が割り当てられていることがわかります。ここで

例えば、

def print_name(name=None): 
    if name is not None: 
     print(name) 
    else: 
     print("Default name") 

、一つの引数を期待print_name機能。ユーザーが入力した場合はNoneではない可能性がありますので、ユーザーが渡した実際の名前が表示されます。何も渡さない場合は、デフォルトでNoneが割り当てられます。ここでnameNoneでないかどうかを確認して、Default nameの代わりに実際の名前が印刷されていることを確認します。

注:あなたが本当にあなたの変数が定義されているかどうかを知りたい場合はは、あなたがそれはPythonの変数は初期化されていないことができないことは注目に値します。この

try: 
    undefined_variable 
except NameError as e: 
    # Do whatever you want if the variable is not defined yet in the program. 
    print(e) 
+0

非常に明確です、ありがとうございます。 – davioooh

0

None

>>> a = "" 
>>> if a: 
...  print (True) 
... 
>>> if a is not None: 
...  print (True) 
... 
True 
>>> 

とブール値

>>> a = False 
>>> if a: 
...  print (True) 
... 
>>> if a is not None: 
...  print (True) 
... 
True 
>>> 

ない''つまりnull文字列を例に取るとこのように、彼らは同じではありません

2

ませif 0はどこFalseにないだろうmy_variableが実際に0だった場合、if my_variable is not None:はTrueとなります。任意の虚偽値について同じである。

In [10]: bool([]) 
Out[10]: False 

In [11]: bool(0) 
Out[11]: False 

In [12]: bool({}) 
Out[12]: False 
In [13]: [] is not None 
Out[13]: True 
In [14]: 0 is not None 
Out[14]: True 
+0

良い例、ありがとうございます+1 – davioooh

1

をしようとする場合があります。 Pythonの変数は代入によって作成されます。

実際の初期化をチェックする場合は、NameErrorの例外をキャッチして(存在しない)存在を確認する必要があります。

+1

右ありがとうございました! +1 – davioooh

関連する問題