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 ''