在Zed Shaw的Learn Python the Hard Way中的一个例子中,其中一个练习显示以下代码:
next = raw_input("> ")
if "0" in next or "1" in next:
how_much = int(next)
Run Code Online (Sandbox Code Playgroud)
我很难理解in
本声明中的含义.我习惯使用if
语句,例如在javascript中,语法类似于:
var = 5;
if (var > 3) {
//code to be executed
}
Run Code Online (Sandbox Code Playgroud)
这个if
/ in
语句(在python中)是否与if()
javascript 相同?
找到答案是很棘手的,因为这in
是一个很短的字符串来缩小搜索引擎的答案,我不知道它的操作的正确名称.
Tim*_*ker 113
这取决于什么next
.
如果它是一个字符串(如您的示例中所示),则in
检查子字符串.
>>> "in" in "indigo"
True
>>> "in" in "violet"
False
>>> "0" in "10"
True
>>> "1" in "10"
True
Run Code Online (Sandbox Code Playgroud)
如果它是一种不同类型的可迭代(list,tuple,set,dictionary ...),则in
检查成员资格.
>>> "in" in ["in", "out"]
True
>>> "in" in ["indigo", "violet"]
False
Run Code Online (Sandbox Code Playgroud)
在字典中,成员资格被视为"成为关键之一":
>>> "in" in {"in": "out"}
True
>>> "in" in {"out": "in"}
False
Run Code Online (Sandbox Code Playgroud)
utd*_*mir 17
使用a in b
只是转换为b.__contains__(a)
,如果b包含或不包含,则应返回.
但是,您的示例看起来有点奇怪,它接受来自用户的输入,并在输入包含或时将其整数值赋给how_much
变量."0"
"1"
由于您声称自己习惯使用JavaScript:
Python in
运算符类似于JavaScript in
运算符.
这是一些JavaScript:
var d = {1: 2, 3: 4};
if (1 in d) {
alert('true!');
}
Run Code Online (Sandbox Code Playgroud)
和等效的Python:
d = {1: 2, 3: 4}
if 1 in d:
print('true!')
Run Code Online (Sandbox Code Playgroud)
对于对象/ dicts,它们几乎相同,都检查是否1
是对象/字典的键.当然,最大的区别在于JavaScript是一种类型,所以'1' in d
也是如此.
对于数组/列表,它们是非常不同的.JS数组是一个对象,它的索引是键,所以1 in [3, 4, 5]
也是true
.Python列表与dict完全不同,它的in
运算符检查值,而不是索引,这往往是更加有用.Python将此行为扩展到所有迭代.
对于字符串,它们甚至更加不同.JS字符串不是对象,所以你会得到一个TypeError
.但是Python str
或unicode
将检查其他操作数是否是子字符串.(这意味着1 in '123'
非法,因为1
不能是任何东西的子串,但是'1' in '123'
是真的.)
使用对象为对象,在JS当然还有的没有区别,但在Python中,对象是类,不http://stardict.sourceforge.net/Dictionaries.php下载实例.所以,在JS中,1 in d
如果一个对象有一个名为的成员或方法'1'
,那么它将是真的,但在Python中,它取决于你的类是什么意思--Python会调用d.__contains__(1)
,然后,如果失败,它会尝试使用你的对象作为一个可说的(通过调用它__iter__
,如果失败,通过尝试从整数开始索引它0
).
另外,请注意JS in
,因为它实际上正在检查对象成员资格,通常是JS方法 - 解析 - 顺序搜索,而Python in
,因为它检查dict的键,序列的成员等,没有这样的事情.因此,从技术上讲,它可能hasOwnProperty
比in
运算符更接近该方法.