這兩個語句是否相等?python:if row [1] .upper()。find(brand)!= - 1:
if row[1].upper().find(brand)!=-1:
和
if row[1].upper().find(brand):
這兩個語句是否相等?python:if row [1] .upper()。find(brand)!= - 1:
if row[1].upper().find(brand)!=-1:
和
if row[1].upper().find(brand):
不,他們是不相等的。在Python中,任何非零數字都被視爲True,所以如果表達式計算結果爲-1,則第二個語句將被視爲true;如果表達式的計算結果爲0(當它應該爲true),則返回false。
使用第一條語句。
號第一個將評估爲false
只有find()
回報-1
。
只有當find()
返回0
時,第二個纔會評估爲false
。
這甚至會給你錯誤的結果,因爲0
意味着子串是在字符串的開頭找到的。因此,如果子字符串在開頭,則該語句將評估爲false
,如果未找到該子句,則該值爲true
。
不,當然不是。
第一個檢查結果是否爲-1
,另一個檢查結果是否是Python認爲是「false」的結果。 Python不被認爲是錯誤的-1
。
爲了解釋find()
方法做什麼:
>>> "hello".find("l")
2
>>> "hello".find("he")
0
>>> "hello".find("x")
-1
-1
是一個「神奇的價值」爲「找不到搜索字符串」。與index()
進行對比:
>>> "hello".index("l")
2
>>> "hello".index("he")
0
>>> "hello".index("x")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
就個人而言,我更喜歡index()
,因爲通常情況下,魔法值應在Python皺起了眉頭,而異常處理是Python的方式來做到這一點 - 「EAFP」(它更容易請求原諒比許可) 。
在你的情況下,它看起來像「LBYL」編程風格(看你跳躍之前),雖然你沒有顯示很多上下文,所以我不知道if
聲明是什麼決定。
正如其他人所說,沒有那些陳述是不相同的。然而,當你只需要找到如果的子存在,而不是哪裏,我更喜歡in
運營商,而不是.find()
,如:
if brand in row[1].upper():
這相當於第一條語句,但更簡潔易於閱讀。
最常見的答案是正確的。但我發現閱讀in
比使用數字結果更容易。即,
>>> row
[[1, 'lysol']]
>>> brand
'Lysol'
>>> brand.upper() in row[0][1].upper()
True
>>>
儘管「Schlysol」品牌出現後,所有投注都關閉。嗯。
非常感謝您的幫助! – 2010-07-29 17:45:17