python 中的“in”和“not in”语句如何工作

2024-03-06

我主要学习 C 语言,并花了很多时间了解其底层实现。但我最近开始学习Python。所以这里有很多与C不同的怪癖。

python 中的“in”语句如何工作?

if x in array:
   #the usage of an in statement produces a boolean
for x in array:
   #the usage of an in statement produces an iterable

也作为一个附带问题。 'Not' 可以放在布尔表达式前面,类似于 '!'在 C 中,也可以放在 python 中的“in”语句前面。这怎么可能?

if not x == 5:
   #makes sense because 'x == 5' evaluates to a boolean
if x not in array:
   #the statement 'in array' is not a boolean
   #shouldn't it be 'if not x in array'

这两者怎么可能呢?他们的评估方式不应该保持一致吗?现在,我相信这是因为Python是一种解释性语言,解释器可以根据周围的语法做不同的事情。

解释或解释链接将非常有帮助,我一直找不到解决此问题的任何内容。


你混淆了两个完全不相关语法片段。

一个是一个陈述,参见for陈述 https://docs.python.org/3/reference/compound_stmts.html#the-for-statement文档。这in是固定语法的一部分:

for_stmt ::=  “for” target_list “in” expression_list “:” suite
              [“else” “:” suite]

当你使用的那一刻for开始一行,in部分是必需的,就像:是必须的。不要混淆 Python 的for带有 Cfor环形; Python 是一个For Each构造 https://en.wikipedia.org/wiki/Foreach。因此,它不会“生成”可迭代对象,它需要可迭代对象作为输入。

另一个是一个会员试运营 https://docs.python.org/3/reference/expressions.html#membership-test-operations,并且运算符是一种类型表达:

经营者in and not in测试会员资格。

它适用于容器(而不仅仅是可迭代对象)。

两者都严重依赖于 Python 的 OO 本质,这是 C 无法做到的。如果您想找到其他语言中的等效项,请查看 C++、Java 或 C# 中的概念,而不是 C。

for <expr> in <iterable>需要一个可迭代对象 https://docs.python.org/3/glossary.html#term-iterable,可以产生一个又一个元素的东西。 C++ 有一个等价概念 http://www.cplusplus.com/reference/iterator/,在 Java 中也有相似之处迭代器 https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html and streams https://docs.oracle.com/javase/8/docs/api/?java/util/stream/Stream.html.

<expr> [not] in <expr>仅要求右侧表达式结果支持成员资格测试,但如果没有显式钩子可用于成员资格测试,Python 将回退到迭代。这not in not in只是将结果反转in手术。

C++ 和 Java 对此没有标准抽象,不同的容器类型各自实现自己的拼写(在 C++ 中大多数称之为find, e.g. set::find http://www.cplusplus.com/reference/set/set/find/ or map::find http://en.cppreference.com/w/cpp/container/map/find,而Java通常选择contains变化,给你Set.contains() https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains%28java.lang.Object%29, and Map.containsKey() https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#containsKey-java.lang.Object-).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 中的“in”和“not in”语句如何工作 的相关文章

随机推荐

  • 找不到模块“./App.svelte”或其相应的类型声明

    我有一个将电子与 svelte 集成以及打字稿支持集成的设置 当我运行rollup编译 svelte 应用程序的脚本 我找不到模块 App svelte错误如下图所示 Plugin typescript rollup plugin type
  • PHP 警告:非法字符串偏移

    我是 PHP 新手 今天 PHP 从 5 3 3 版本迁移到 5 4 4 版本 Debian Squeeze 到 Debian Wheezy 之后 我从 Apache 日志中收到此错误 gt PHP 警告 xyz 中的非法字符串偏移 php
  • 如何在实体框架 4.3.1 中禁用迁移?

    有没有办法在 Entity Framework 4 3 1 中禁用迁移 我从项目中删除了迁移文件夹以及数据库中生成的表 但它不起作用 如何删除迁移 如果您不想使用迁移 但同时希望 EF 为您创建数据库 则只需设置正确的数据库初始值设定项 D
  • keras.backend的clear_session()方法没有清理拟合数据

    我正在研究不同类型数据质量的拟合精度结果的比较 好数据 是特征值中没有任何NA的数据 坏数据 是特征值中具有 NA 的数据 坏数据 应该通过一些值修正来修复 作为值修正 它可能会用零或平均值替换 NA 在我的代码中 我尝试执行多个拟合过程
  • 为什么这是一个最终递归可变参数宏?

    以下构造在 VisualStudio 2013 中进行编译 我刚刚创建了一个新的 consoleApplication 项目 并且仅更改了主 cpp 因此您只需粘贴它并尝试一下即可 它显然所做的是创建一个最终递归可变参数宏 include
  • Python 代码:几何布朗运动 - 出了什么问题?

    我对 Python 还很陌生 但是对于大学论文 我需要应用一些模型 最好使用 Python 我花了几天时间处理我附加的代码 但我真的帮不上忙 出了什么问题 它没有创建一个看起来像带有漂移的标准布朗运动的随机过程 我的参数 如 mu 和 si
  • Windows 通用项目不支持 VS2017 页面

    从昨天开始我遇到了一个相当不愉快的问题 我清除了 NuGet 缓存 因为我无法让 NuGet 包与我的代码之一一起使用 但这没有帮助 反而搞砸了我之前编写的 UWP 应用程序 我的代码中的每个元素都会出现错误 如下所示 在 XAML 中 主
  • PostgreSQL中如何实现嵌套INSERT语句?

    我有两张桌子 group and groupmembers 在插入行时group表 我还想插入两个值 groupid 来自组表的 ID 和userid 创建该组的用户的 ID 到groupmembers桌子 这些是表格 CREATE TAB
  • 如何将根(裸)域重定向到 www - heroku 和 zerigo

    我有一个域 example com 和 www example com 我正在使用 Heroku 和 Zerigo 作为 DNS 现在我有一个从我的 Hostgator 帐户从根域到 www example com 的转发 但这不起作用 我
  • python 的 swig 类型映射:输入和输出数组

    我想在 Python 中使用一个 C 函数 extern int convertAtoB stateStruct myStruct const double PointA 3 double PointB 3 使用 SWIG 我想我需要定义一
  • Web API 2 和 .NET 4.5.1 迁移后 GlobalConfiguration.Configure() 不存在

    我最近开始关注本指南 http www asp net mvc tutorials mvc 5 how to upgrade an aspnet mvc 4 and web api project to aspnet mvc 5 and w
  • Flutter - BloC Cubit 函数不发出状态

    我正在创建一个 Flutter 应用程序 我在项目中添加了一个 BloC 以管理状态 我创建了一个包含数据的列表 我想使用 添加 按钮手动将项目添加到 ListView 我写了一段代码 我的物品 肘节 class ItemCubit ext
  • 如何在 Alembic 迁移中使用现有的 sqlalchemy 枚举 (Postgres)

    在过去的某个时候 我运行了一次 alembic 迁移 它创建了一个users桌子像 def upgrade op create table users sa Column id sa Integer autoincrement True n
  • Eclipse RCP 和 tycho - 无法解析 org.eclipse.swt.widgets.Button 类型。它是从所需的 .class 文件间接引用的

    情况 我有一个 Eclipse RCP 应用程序 我正在尝试使用 Eclipse 的 tycho 插件构建它 当我在 IDe 内执行 Eclipse 应用程序时 应用程序正常执行 当使用 tycho 构建应用程序时 抛出以下错误 The t
  • Linq2Sql 检索数据点

    我目前正在开发一个使用 linq2sql 作为数据库访问框架的项目 现在有很多 linq 查询 它们基本上执行以下操作 var result from
  • R tm包:utf-8文本

    我想为 utf 8 中的非英语文本创建一个词云 实际上 它是哈萨克语 文本在 tm 包的检查功能中显示得绝对正确 但是 当我搜索词频时 所有内容都显示不正确 问题在于文本显示为编码字符而不是单词 西里尔字符显示正确 结果 词云变得一团糟 是
  • 使用 Simplepie 时出现弃用错误

    我已经安装了最新的 Simplepie 代码 1 2 1 并且我正在使用他们提供的演示代码
  • 有没有办法在另一种形式上显示一种形式的一部分?

    我有一个表格 我想做的就是在另一个表单上显示该表单的一部分 我不希望它发挥作用或任何东西 我基本上只是希望它是一张图片 这可能吗 如果可能的话 如何实现 Like display new display form new rectangle
  • 具有动态形状的变量 TensorFlow

    我需要在 TensorFlow 中创建一个矩阵来存储一些值 诀窍是矩阵必须支持动态形状 我正在尝试做与 numpy 中相同的事情 myVar tf Variable tf zeros x y validate shape False whe
  • python 中的“in”和“not in”语句如何工作

    我主要学习 C 语言 并花了很多时间了解其底层实现 但我最近开始学习Python 所以这里有很多与C不同的怪癖 python 中的 in 语句如何工作 if x in array the usage of an in statement p