当前位置: 首页 > 面试题库 >

表达式中的Python“ in”关键字与for循环中的关键字“复制”

阴永逸
2023-03-14
问题内容

我了解in操作员在此代码中的作用:

some_list = [1, 2, 3, 4, 5]
print(2 in some_list)

我也明白这i将采用此代码中列表的每个值:

for i in [1, 2, 3, 4, 5]:
    print(i)

我很好奇,如果in在使用的操作for循环是一样的in第一个代码使用运营商。


问题答案:

它们是相同的概念,但不是相同的运算符。

print(2 in some_list)示例中,in是一个处理几种不同情况的运算符。在Python文档的in运营商给予的细节,我意译如下:x in y电话y.__contains__(x),如果y有一个__contains__成员函数。否则,请x in y尝试迭代y.__iter__()查找xy.__getitem__(x)如果__iter__不存在,则调用。复杂性是为旧代码和新代码提供一致的成员资格测试-__contains__如果要实现自己的类,这就是您想要的。

for循环中,in仅仅是将loop-
index变量与循环中的变量分开的标记。循环的Python文档for讨论了语义,我将其解释如下:in在循环开始时对之后的内容进行评估以提供迭代器。然后,循环主体针对迭代器的每个元素运行(禁止break或其他控制流更改)。该for语句不必担心__contains____getitem__

编辑 @Kelvin有一个好处:您可以in针对自己的新型类(class foo(object))更改行为:

  • 要更改x in y,请定义y.__contains__()
  • 要更改for x in y,请定义y.__iter__()


 类似资料:
  • 问题内容: ECMAScript 6应该提供块范围,而不会引起麻烦。有人可以解释为什么在函数下面的代码中解析为循环中的最后一个值(与一样),而不是当前迭代中的值吗? 根据MDN在这样的循环中使用应将变量绑定在循环主体的范围内。当我在块中使用临时变量时,事情按我期望的那样工作。为什么有必要? 我使用Traceur和来测试了脚本。 问题答案: quin着眼睛的答案不再是最新的。在ECMA 6规范中,指

  • 问题内容: 我正在编写一个程序,该程序会对python进行一些代码生成,并且如果它是python关键字,则需要以不同的方式对待字符串。打印python关键字和一些其他内容,但是我想知道是否存在一种pythonic的方法来获取包含这些字符串的实际可迭代对象? 问题答案: 您最好使用关键字模块

  • 本文向大家介绍浅谈Java中的final关键字与C#中的const, readonly关键字,包括了浅谈Java中的final关键字与C#中的const, readonly关键字的使用技巧和注意事项,需要的朋友参考一下 在编程语言中都有某种方式,告知编译器一块数据是恒定不变的。有两个需求 1. 一个永不改变的编译器常量 2. 一个在运行时被初始化的值,而这个值不会被改变 在Java中,使用fina

  • 问题内容: 在Python脚本中,我从调用了一个函数,但出现此错误: 这里到底出了什么问题? 问题答案: 不是有效的关键字参数名称。关键字参数必须是有效的标识符。您应该查看正在使用的库的文档,该参数的 实际 调用方式是–也许?

  • 问题内容: 我正在尝试从parse.com实现一些代码,并且在void后发现一个关键字。 我难住了,这是什么?您在第二行看到 该文档没有对此进行说明。我知道关键字用于循环。 有人确认吗? 问题答案: 在命名函数中,我们声明参数并在声明行中返回类型。 在匿名函数中,没有声明行-它是匿名的!因此,我们在正文的开头使用一行来代替。 (这是匿名函数的 完整 形式。但是Swift拥有一系列规则,允许在某些情

  • 问题内容: 是python中的关键字吗? 我看过一些使用关键字的代码就很好,而其他人则建议不要使用它,而我的编辑器则将其作为关键字进行颜色编码。 问题答案: 不,是内置的,不是关键字: 可以将其视为的别名,但是由于新框架替代了它,因此已从Python 3中删除了它。从技术上讲,它是函数返回的对象的类型。