if语句中“ in”的使用和含义?

在Zed Shaw的“ 学习Python的艰难方法”的示例中,其中一个练习显示了以下代码:


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)一样if()在JavaScript?


找到这个问题的答案非常棘手,因为这in是一个很短的字符串,无法通过搜索引擎缩小答案的范围,而且我不知道其操作的正确名称。


动漫人物
浏览 1035回答 3
3回答

鸿蒙传说

这取决于什么next。如果是字符串(如您的示例中所示),则in检查子字符串。>>> "in" in "indigo"True>>> "in" in "violet"False>>> "0" in "10"True>>> "1" in "10"True如果它是另一种可迭代的类型(列表,元组,集合,字典...),则in检查成员资格。>>> "in" in ["in", "out"]True>>> "in" in ["indigo", "violet"]False在字典中,成员资格被视为“关键之一”:>>> "in" in {"in": "out"}True>>> "in" in {"out": "in"}False

慕的地6264312

由于您声称习惯于JavaScript:Python in运算子类似于JavaScript in运算子。这是一些JavaScript:var d = {1: 2, 3: 4};if (1 in d) {    alert('true!');}和等效的Python:d = {1: 2, 3: 4}if 1 in d:    print('true!')对于对象/字典,它们几乎相同,都检查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中,对象是类的实例,而不是字典。因此,在JS中,1 in d如果对象具有名为的成员或方法'1',则该参数为true ,但在Python中,这取决于类的含义-Python将调用d.__contains__(1),然后,如果失败,它将尝试将您的对象用作一个可发音的(通过调用其__iter__,如果失败,则尝试使用以开头的整数对其进行索引0)。另外,请注意in,因为JS的实际上是在检查对象成员资格,所以通常进行JS方法的分辨率顺序搜索,而Python的in因为检查的是dict的键,序列的成员等,则不会执行此类操作。因此,从技术上讲,它可能hasOwnProperty比in操作员更接近该方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python