Python不支持 i ++ 语法的原因解析


Posted in Python onJuly 22, 2020

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

Python不支持 i ++ 语法的原因解析

正常情况下,当有人问起++原因而不是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不支持 i ++ 语法的原因解析 

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

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

Python不支持 i ++ 语法的原因解析

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

  • 它关心值范围内的迭代遍历。
  • 它不在乎或不需要人为添加数字。

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

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

Python不支持 i ++ 语法的原因解析

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

Python不支持 i ++ 语法的原因解析 

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

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

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

摘要

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

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

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

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

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

Python 相关文章推荐
python3.3使用tkinter开发猜数字游戏示例
Mar 14 Python
python基础教程之面向对象的一些概念
Aug 29 Python
python处理PHP数组文本文件实例
Sep 18 Python
使用Python编写提取日志中的中文的脚本的方法
Apr 30 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
Python while循环使用else语句代码实例
Feb 07 Python
python网络编程之五子棋游戏
May 14 Python
python os模块在系统管理中的应用
Jun 22 Python
python如何代码集体右移
Jul 20 Python
基于selenium及python实现下拉选项定位select
Jul 22 #Python
Python实现手绘图效果实例分享
Jul 22 #Python
Selenium及python实现滚动操作多种方法
Jul 21 #Python
如何在mac版pycharm选择python版本
Jul 21 #Python
python如何变换环境
Jul 21 #Python
零基础学Python之前需要学c语言吗
Jul 21 #Python
Python常驻任务实现接收外界参数代码解析
Jul 21 #Python
You might like
php对象在内存中的存在形式分析
2015/02/03 PHP
深入理解PHP内核(一)
2015/11/10 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
json简单介绍
2008/06/10 Javascript
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
2013/07/08 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
市优秀教师事迹材料
2014/02/05 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
教师节祝酒词
2015/08/11 职场文书
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏