0

Pythonには少し疑問があります。

x = ''
if x:
    print 'y'

したがって、「y」として出力されることはありません

私が行った場合 :

x = 0
if x:
    print 'y'

それからも同じことをします。

'' 値と 0 値がある場合、どうすれば区別できますか? 0 値のみを考慮する必要がある場合はどうすればよいでしょうか?

4

4 に答える 4

4

これは、オブジェクトが機能__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

于 2012-04-11T07:38:35.700 に答える
3

条件の python では、空の iterable (ここでは文字列) が false と評価されました。

値が0明示的かどうかを確認する必要がある場合は、次のように言う必要がありますx==0

于 2012-04-11T07:34:23.753 に答える
2
if x != '':
    print 'y'

x がそうでない場合にのみ機能します''

于 2012-04-11T07:31:57.887 に答える
0

私はあなたが実際に何を望んでいるのかはっきりしていません - あなたの質問の文言は少し混乱しています - しかし、これは明らかになるかもしれません:

>>> 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 ''
于 2012-04-11T07:41:51.113 に答える