Pythonには少し疑問があります。
x = ''
if x:
print 'y'
したがって、「y」として出力されることはありません
私が行った場合 :
x = 0
if x:
print 'y'
それからも同じことをします。
'' 値と 0 値がある場合、どうすれば区別できますか? 0 値のみを考慮する必要がある場合はどうすればよいでしょうか?
Pythonには少し疑問があります。
x = ''
if x:
print 'y'
したがって、「y」として出力されることはありません
私が行った場合 :
x = 0
if x:
print 'y'
それからも同じことをします。
'' 値と 0 値がある場合、どうすれば区別できますか? 0 値のみを考慮する必要がある場合はどうすればよいでしょうか?
これは、オブジェクトが機能__nonzero__()
し__len__()
、条件の評価に使用されるためです。ドキュメントから:
object.__nonzero__(self)
真理値テストと組み込み操作を実装するために呼び出されます
bool()
。False
はor 、またはそれらに相当する整数 0 または 1を返す必要True
があります。このメソッドが定義されていない__len__()
場合、定義されている場合は が呼び出され、オブジェクトの結果がゼロでない場合は true と見なされます。__len__()
クラスで もも定義されていない場合、__nonzero__()
そのすべてのインスタンスが true と見なされます。
これらをオーバーロードすることにより、カスタム クラスに対してもそのような動作を指定するために使用できます。
if 条件については、チェックしたいものを正確に指定できます。
if x: # evaluate boolean value implicitly
pass
if x is 0: # compare object identity, see also id() function
pass
if x == 0: # compare the object value
pass
暗黙のブール値評価の特別なケースについては、int
オブジェクトTrue
がゼロでない場合は考慮されます。オブジェクトの長さがゼロでない場合、str
オブジェクトは考慮されます。True
条件の python では、空の iterable (ここでは文字列) が false と評価されました。
値が0
明示的かどうかを確認する必要がある場合は、次のように言う必要がありますx==0
if x != '':
print 'y'
x がそうでない場合にのみ機能します''
私はあなたが実際に何を望んでいるのかはっきりしていません - あなたの質問の文言は少し混乱しています - しかし、これは明らかになるかもしれません:
>>> test_values = [0,0.00,False,'',None, 1, 1.00, True, 'Foo']
>>> for v in test_values:
if (not v) and (v != ''):
print "Got a logically false value, %s, which was not the empty string ''" % v.__repr__()
Got a logically false value, 0, which was not the empty string ''
Got a logically false value, 0.0, which was not the empty string ''
Got a logically false value, False, which was not the empty string ''
Got a logically false value, None, which was not the empty string ''