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

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

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

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

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

当这些语言的用户进入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 ++ 语法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python显示无效语法怎么处理-Python不支持 i ++ 语法的原因解析相关推荐

  1. python运行不了control+shift+i_Python不支持 i ++ 语法的原因解析

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

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

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

  3. python显示无效语法怎么处理-python – 无效语法(对于循环括号/括号)

    以下代码行输出SyntaxError:无效语法 for (i in range(-WIDTH,WIDTH)): 下一个工作没有错误.我不知道这里应该是什么语法错误.所以我只是出于好奇而问.我猜测括号会 ...

  4. python显示安装失败_关于python:安装失败并显示Requirements.txt,但可用于pip安装...

    与使用pip直接安装时相比,在使用requirements.txt时出现一些奇怪的行为. 希望您能对此有所了解. 这可能与未解决的问题相同:pip install -r requirements.tx ...

  5. python显示gif图片_利用Python制作GIF图片

    #Python制作GIF图片 import imageio def create_gif(image_list, gif_name, duration = 0.1): ''' :param image ...

  6. python显示文字框_在Python 中实现图片加框和加字的方法

    第一步:安装opencv-python rpm -ivh opencn-python-2.4.5-3.el7.ppc64le.rpm 第二步:引用cv2 import cv2 第三步:读入图片,必须是 ...

  7. python显示两列_#160;python分两列输出

    分割成一个包含两个元素列表的列 对于一个已知分隔符的简单分割(例如,用破折号分割或用空格分割).str.split() 方法就足够了 . 它在字符串的列(系列)上运行,并返回列表(系列). >& ...

  8. python 列表 换行_python基础语法学习——参考Python Crash Course

    第一章:python在各个系统之间的安装和使用(略) 第二章: 变量 2.1.每个变量都存储了一个值 --与变量相关联的信息.在程序中可随时修改变量的值,而 Python将始终记录变量的最新值. 2. ...

  9. python 10个100以内随机整数编辑_Python基础语法合集(转自CSDN)

    了解python 1. 了解Python Python是一种解释型(这意味着开发过程中没有了编译这个环节).面向对象(支持面向对象的风格或代码封装在对象的编程技术).动态数据类型的交互式(可在命令行中 ...

最新文章

  1. php通过http请求发送数组
  2. Nessus更新到8.3.0
  3. oracle游标理解,oracle游标的使用方法
  4. mysql数据库备份到oss_备份MySQL数据库并上传到阿里云OSS存储
  5. 基于 Kubernetes 的微服务部署即代码
  6. SQL模糊查询语句和Escape转义字符
  7. 数据中台技术及业务发展史与未来趋势展望
  8. oracle11gr2安装测试,Ubuntu 11.10下安装Oracle 11g R2 详解(本人测试通过) (转)
  9. 利用vbs脚本编写Windows XP/2003序列号更改器
  10. 云计算机什么意思啊,什么叫云计算,云计算是什么,最通俗的解释是这样的
  11. 独家 | 手把手教随机森林
  12. protobuf入门教程(四):repeated限定修饰符
  13. 去掉迅雷右侧内置浏览器
  14. 一个女留学生在美国的七年(转载)
  15. html5历史记忆展开幕,《厦门记忆》历史影像专题展开幕 汇集150幅老照片
  16. java工程师js_Ajax,  励志做一名Java全干工程师
  17. Typora 如何依次打小黑点,空心圆,实心框后恢复空心圆、小黑点
  18. Mybatis(1)——Mybatis Generator自动生成代码
  19. java基础入门第二版二手,细节爆炸
  20. python将图片转换为PDF文件

热门文章

  1. DNS隐蔽通道 是可以通过dig 子域名来追踪其真实IP的
  2. docker hub下载慢解决方法 使用daocloud的mirror
  3. 微信小程序-封装http请求(ajax)
  4. 牛客2018校招 1. 拼多多 大整数相乘
  5. win10下右键菜单添加“打开cmd”
  6. mysql 的S 锁和X锁的区别
  7. lr_save_string lr_eval_string使用介绍
  8. Xcode学习C++(三、const)
  9. ASP.Net面向对象思想
  10. Theme,skin-----asp.net2.0 new technolog