为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

动漫人物 2019-12-27 09:08:35
在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是一个很短的字符串,无法通过搜索引擎缩小答案的范围,而且我不知道其操作的正确名称。
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

这取决于什么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


查看完整回答
反对 回复 2019-12-27
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

由于您声称习惯于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操作员更接近该方法。


查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 1030 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信