在Zed Shaw的Learn Python the Hard Way中的一个示例中,其中一个练习显示以下代码:
next = raw_input("> ")
if "0" in next or "1" in next:
how_much = int(next)
我很难理解这句话中in
的意思。我习惯于使用if
语句,比如在javascript中,语法如下:
var = 5;
if (var > 3) {
//code to be executed
}
这个if
/in
语句(在python中)是否与javascript中的if()
语句相同?
找到这个问题的答案是很棘手的,因为in
是一个很短的字符串,通过搜索引擎可以缩小答案的范围,而且我不知道它的操作的正确名称。
使用
a in b
简单地转换为b.__contains__(a)
,如果b包含a或不包含a,则应该返回。但是,您的示例看起来有点奇怪,它接受来自用户的输入,如果输入包含
"0"
或"1"
,则将其整数值赋给how_much
变量。既然你声称习惯了JavaScript:
Python^{} 运算符与JavaScript^{} 运算符类似。
下面是一些JavaScript:
以及等效的Python:
对于objects/dict,它们几乎是相同的,都检查
1
是否是object/dict的一个键。当然,最大的区别是JavaScript是草率类型的,所以'1' in d
也同样正确。对于数组/列表,它们非常不同。JS数组是一个对象,其索引是键,因此
1 in [3, 4, 5]
将是true
。Python列表与dict完全不同,它的in
运算符检查的是值,而不是索引,后者往往更有用。Python将此行为扩展到所有iterable。有了弦,它们就更不一样了。JS字符串不是对象,因此您将得到一个
TypeError
。但是Pythonstr
或unicode
将检查另一个操作数是否是子字符串。(这意味着1 in '123'
是非法的,因为1
不能是任何子字符串,但是'1' in '123'
是真的。)对象作为对象,在JS中当然没有区别,但在Python中,对象是类的实例,而不是dict。因此,在JS中,
1 in d
对于一个名为'1'
的成员或方法是正确的,但在Python中,这取决于您的类,它的意思是Python将调用d.__contains__(1)
,然后,如果失败,它将尝试将您的对象用作可发出的对象(通过调用它的__iter__
,如果失败,则尝试使用从0
开始的整数对其进行索引)。另外,请注意JS的} 方法。
in
,因为它实际上是在检查对象成员身份,所以执行通常的JS方法解析顺序搜索,而Python的in
,因为它检查dict的键、序列的成员等,所以不执行这种操作。所以,从技术上讲,它可能比in
运算符更接近^{这取决于
next
是什么。如果是字符串(如您的示例中所示),则
in
检查子字符串。如果是另一种iterable(list、tuple、set、dictionary…),则
in
检查成员身份。在词典中,成员资格被视为“关键因素之一”:
相关问题 更多 >
编程相关推荐