简要讨论为什么它不提供++作为运算符

正常情况下,当有人问起++原因而不是Python中的运算符时,这一行引起了我的注意。

如果您想知道最初的原因,则必须翻阅旧的Python邮件列表,或询问那里的某个人(例如Guido)〜通过stackoverflow

这迫使我像上图一样思考。 真的我必须问Guido原因吗? 好的,也许但是在那之前,我应该尝试一下,这促使我写这篇文章

在C / C ++ / Java之类的语言中,对整数变量进行自增或自减运算是标准的,可以分为前缀运算(++ i和–i)和后缀运算(i ++和i–), 每个都有细微的差异和不同的目的。

当这些语言的用户进入Python时,他们可能会想知道为什么它不提供++或-操作。

尽管前缀++ i可能出现在Python中,但它不是" ++"自增运算符。

在这种情况下,它只是两个" +"(正号)的叠加,而根本不支持" ++"后缀! (SyntaxError:语法无效)。

那么,为什么Python不支持i ++增量语法?

首先,Python当然可以实现自我增强的效果,即以i + = 1或i = i + 1的形式编写,这在其他语言中也很常见。

尽管Python在底部使用了不同的魔术方法(add ()和__iadd __())来完成计算,但是表面上的效果却完全相同。

因此,我们的问题可以转换为:为什么以上两种书写风格会比i ++更好,并成为Python的最终选择?

1. Python整数是不可变的类型

当我们定义i = 1000时,不同的语言会区别对待它们。

诸如C(写入int = 1000)的语言将适用于内存空间,并将其``绑定''到固定名称i上,同时写入变量值1000。

这里,i的地址和类型是固定的,而值是可变的。

Python(写i = 1000)也将申请内存空间,但是它将"绑定"到数字1000,即该1000的地址和类型是不可变的

因此,当我们使我"自我增加"(i = i + 1)时,两者都被区别对待。

诸如C之类的语言首先找到存储在i地址中的值,然后将其加1。 操作后,新值将替换旧值 Python的操作过程是将i指向的数字加1,然后,将结果绑定到新应用的存储空间,然后将名称标签"粘贴"到新数字。

打个比方:C中的i就像是一个寄生了1000的主机,而Python中的1000就像了一个寄生了i的主机。 所以我在C语言中与Python中的1000相同

综上所述,让我们看一下i ++,不难发现:

在C之类的语言中,i ++可以表示i的数值属性的增加,既不会打开新的内存空间,也不会创建新的一等公民 在像Python这样的语言中,如果i ++是对其name属性的操作,则这没有任何意义。 如果将其理解为对数字本体的一种操作,那么情况将会很复杂。

它将生成一个新的一等公民1001,因此需要为其分配一个内存地址。 如果此时占用的地址为1000,则将涉及旧对象的回收,并且与1000的原始引用关系也将受到影响。 因此只能为1001打开新的内存空间

如果Python支持i ++,则其操作过程将比C ++复杂,并且其含义不再是"将数字增加1"(递增),而应是"创建新数字"。

Python理论上可以实现i ++操作,但是它必须重新定义"增量运算符",这将导致具有其他语言经验的人误解。

最好让每个人都直接写i + = 1或i = i + 1。

2. Python具有可迭代的对象

诸如C / C ++之类的语言已将i ++设计为主要是为了方便使用三部分的for循环结构。

这种程序与数字本身的自增过程有关。 数字的增加与程序主体的执行有关。

Python中没有这种结构,它提供了一种更优雅的方法:

这里反映了不同的思维方式。

它关心值范围内的迭代遍历。

它不在乎或不需要人为添加数字。

Python中的可迭代对象/迭代器/生成器提供了很好的迭代/遍历用法,并且可以完全替代i ++。

例如,Python可以使用enumerate()与上述示例中的值同时遍历下标和特定值。

再举一个例子,对于字典遍历,Python提供了keys(),values(),item()和其他遍历方法,这些方法非常易于使用:

不仅在Python中很少使用i + = 1或i = i + 1,而且迭代对象的可用性使操作值范围变得容易,并且很少有人要求对其进行累加。

因此,回到我们最初的问题,这两种"自增"方法并不比i ++好多少,仅仅是因为它们是通用操作

这就是为什么无需引入新的运算符,Python会继续提供基础支持的原因。 真正的赢家是各种各样的可迭代对象!

摘要

Python不支持递增运算符,原因如下:

因为它的整数是一类不变的一等公民,所以如果要支持增量运算(++),将会带来歧义

含糊不清的原因:在本故事中

主要是因为它具有更合适的实现,即迭代对象,它对遍历操作具有良好的支持。

到此这篇关于Python不支持 i ++ 语法的原因解析的文章就介绍到这了,更多相关Python不支持 i ++ 语法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:http://developer.51cto.com/art/202007/621634.htm

python运行不了control+shift+i_Python不支持 i ++ 语法的原因解析相关推荐

  1. python显示无效语法怎么处理-Python不支持 i ++ 语法的原因解析

    简要讨论为什么它不提供++作为运算符 正常情况下,当有人问起++原因而不是Python中的运算符时,这一行引起了我的注意. 如果您想知道最初的原因,则必须翻阅旧的Python邮件列表,或询问那里的某个 ...

  2. python jieba库下载_Python中jieba库安装步骤及失败原因解析

    Python 中 jieba 库安装步骤及失败原因解析 作为计算机小白, Python 的流行也让我蠢蠢欲动, 在请教计算机 专业同学后,开始上网课自学 Python 基础知识.今天老师简单的一 句话 ...

  3. sublime配置python运行环境

    1.sublime下载与插件管理 1.1 下载 官网地址:https://www.sublimetext.com/3 1.2 安装Package Control管理插件 使用ctrl + ` (感叹后 ...

  4. sublime说python找不到_sublime配置python运行环境

    1.sublime下载与插件管理 1.1 下载 1.2 安装Package Control管理插件 使用ctrl + ` (感叹后左边的那个键位),输入以下内容 import urllib.reque ...

  5. python运行调出控制台_python控制台怎么打开

    如何使用Python交互式控制台 进入互动控制台 可以从任何安装了Python的本地计算机或服务器访问Python交互式控制台. 您通常希望使用的命令输入Python的默认版本的Python交互式控制 ...

  6. python运行快捷键修改_pycharm快捷键、常用设置、配置管理

    pycharm学习技巧 Learning tips /pythoncharm/help/tip of the day: A special variant of the Code Completion ...

  7. VScode配置Python运行环境

    最近打算用python做一个东西,但是感觉用Pycharm不是特别舒服把,于是自己就打算用万能的VScode配置下环境,然后去找帖子,发现大部分网上的帖子真的水的一批,找了半天配置Python运行环境 ...

  8. Sublime Text3配置Python运行环境(实用)

    1.     Sublime安装PackageControl Sublime安装各种插件都是通过Package Control工具,需要先安装Package Control包,按下快捷键Ctrl+`调 ...

  9. VSCode切换虚拟环境中的python运行代码

    VSCode切换虚拟环境中的python运行代码 我的环境: Win10 0. 创建虚拟环境 可以使用conda或者pipenv两种方法来创建虚拟环境. conda: conda安装建议使用Anaco ...

最新文章

  1. c语言程序设计 中南大学,中南大学-C语言程序设计试卷.docx
  2. 欧姆龙cp1hum读保护解密步骤_欧姆龙PLC的NJ系列NJ产品功能介绍
  3. ab753变频器参数怎么拷贝到面板_20款常用变频器密码,想成为电工老师傅你一定需要,纯干货分享!...
  4. bzoj千题计划315:bzoj3172: [Tjoi2013]单词(AC自动机)
  5. redis mysql 视图_Redis 可以用来做数据库吗?
  6. 七种滤波方法测试matlab
  7. STM32HAL库使用RX8025
  8. 传智五虎是真相?受影射最重PHP学科,这几月在忙什么..?
  9. ubuntu 屏幕亮度无法调节
  10. 语句摘抄——第11周
  11. 玩客云刷armbian安装php环境_[小白版]玩客云刷armbian后搭建anmp环境+可道云
  12. 把代码做成笔记——Jupyter Notebook
  13. 利用C语言绘制操作系统图像界面
  14. BCD码指令 AAA DAA AAS DAS AAM AAD
  15. 标签模型:用户性别标签
  16. linux与RMB的关系,linux mb()/rmb()/wmb()
  17. java,android中网络数据获取和json解析
  18. Web服务器之Tomcat大全
  19. python 通达信数据_[转载]怎么样才能得到 07年08年的1分钟线数据呢,python 和 通达信可以...
  20. java如何截取视频文件_Java获取视频时长及截取帧截图详解

热门文章

  1. 网络安全工具:Wireshark
  2. 如何通过HTTP优雅调用第三方-Feign
  3. LeetCode简单题之使每位学生都有座位的最少移动次数
  4. 摄像头定位:ICCV2019论文解析
  5. android.mk 里面内容介绍
  6. AndroidManifest 配置Activity 一直提示找不到,
  7. SCOI2009 最长距离
  8. 【转载】tf.nn.conv2d_transpose是怎样实现反卷积的?
  9. 【转】android错误 aapt.exe已停止工作的解决方法
  10. 测试笔试题之相关概念