我對python有一點懷疑。如果Python中的語句
x = ''
if x:
print 'y'
所以,它永遠不會打印爲 'Y'
如果我這樣做:
x = 0
if x:
print 'y'
然後也將這樣做。
那麼如果我有'值和0值如何區分如果我只需要考慮0值?
我對python有一點懷疑。如果Python中的語句
x = ''
if x:
print 'y'
所以,它永遠不會打印爲 'Y'
如果我這樣做:
x = 0
if x:
print 'y'
然後也將這樣做。
那麼如果我有'值和0值如何區分如果我只需要考慮0值?
這是因爲目標函數__nonzero__()
和__len__()
將被用來評估條件。 From the docs:
object.__nonzero__(self)
調用,實現真值測試和內置操作
bool()
;應返回False
或True
或其整數等效值0或1.如果未定義此方法,則調用__len__()
(如果已定義),並且如果該對象的結果非零,則認爲該對象爲真。如果一個類既沒有定義__len__()
也沒有定義__nonzero__()
,它的所有實例都被認爲是真實的。
通過重載這些,您可以用來爲自定義類指定這樣的行爲。
至於如果條件下,可以確切地要檢查什麼規定:
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
。
if x != '':
print 'y'
僅工作如果x不是''
的Python爲評估爲假的狀態的空迭代(這裏字符串)。
如果需要檢查,如果值是0
明確你不得不說x==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 ''
如果你正在評估對0再做如果x == 0 – 2012-04-11 07:31:58
沒有它的不僅僅是0.可能會有一些整數更多的值。我只想過濾''值。 – sam 2012-04-11 07:33:00
如果它不僅僅針對0,那麼可能使用switch case語句或if if elseif類型語句,如果它們只有少數幾個可以滿足基本情況? – 2012-04-11 07:45:38