if语句中"in"的用法和含义?

Sch*_*erf 47 python

在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)

  • 或者自定义类`__contains__`方法; P. (15认同)

utd*_*mir 17

使用a in b只是转换为b.__contains__(a),如果b包含或不包含,则应返回.

但是,您的示例看起来有点奇怪,它接受来自用户的输入,并在输入包含或时将其整数值赋给how_much变量."0""1"


aba*_*ert 9

由于您声称自己习惯使用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 strunicode将检查其他操作数是否是子字符串.(这意味着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的键,序列的成员等,没有这样的事情.因此,从技术上讲,它可能hasOwnPropertyin运算符更接近该方法.