2010-07-29 38 views

回答

8

不,他们是不相等的。在Python中,任何非零数字都被视为True,所以如果表达式计算结果为-1,则第二个语句将被视为true;如果表达式的计算结果为0(当它应该为true),则返回false。

使用第一条语句。

2

号第一个将评估为false只有find()回报-1

只有当find()返回0时,第二个才会评估为false
这甚至会给你错误的结果,因为0意味着子串是在字符串的开头找到的。因此,如果子字符串在开头,则该语句将评估为false,如果未找到该子句,则该值为true

1

不,当然不是。

第一个检查结果是否为-1,另一个检查结果是否是Python认为是“false”的结果。 Python不被认为是错误的-1

2

为了解释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声明是什么决定。

5

正如其他人所说,没有那些陈述是不相同的。然而,当你只需要找到如果的子存在,而不是哪里,我更喜欢in运营商,而不是.find(),如:

if brand in row[1].upper(): 

这相当于第一条语句,但更简洁易于阅读。

+0

非常感谢您的帮助! – 2010-07-29 17:45:17

1

最常见的答案是正确的。但我发现阅读in比使用数字结果更容易。即,

>>> row 
[[1, 'lysol']] 
>>> brand 
'Lysol' 
>>> brand.upper() in row[0][1].upper() 
True 
>>> 

尽管“Schlysol”品牌出现后,所有投注都关闭。嗯。

相关问题