Python为什么不支持 i++/i--操作

开发 后端
在python中你是如何执行递增操作的呢?如果你是一位C++或者Java开发人员,在接触到python时则可能尝试过将类似于i++/i--递增(减)操作扩展到python,对,

 你一定想过。然而情况却不理想,python中只能使用类似于 i++/i--等操作。

[[414723]]

python中的自增操作

下面代码几乎是所有程序员在python中进行自增(减)操作的常用方法。 

>>> a = 2 
>>> print(a) 

 
>>> a += 1 
>>> print(a) 

 
>>> a += 100 
>>> print(a) 
103 
 
>>> b = 'Hi' 
>>> b += 1 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
TypeError: can only concatenate str (not "int"to str 
 
>>> b += ' data' 
>>> b 
'Hi data' 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

上述代码中,由于+运算符也可以表示字符串的串联,因此我们也可以将字符串在原来的基础上进行附加。

我们可以使用a++将a递增1吗? 

>>> a++ 
  File "<stdin>", line 1 
    a++ 
      ^ 
SyntaxError: invalid syntax 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

结果是:No,根据设计,Python不允许使用++“运算符”。++术语在C ++ / Java中称为增量运算符,在Python中没有位置。

为什么Python中不支持++操作呢?

如果您想更详细地了解这一点,则需要具有编程语言设计的背景知识。

在Python中不包括++运算符的选项是设计决定。负责使用Python语言创建功能的人们认为,无需引入CPP风格的增量运算符。

【注】什么是CPP?所谓的CPP其实就是C++,C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”。涨姿势了

当Python解释器从我们的输入中解析a ++符号时,会用以下方式进行解释:

由于二进制+运算符是加法运算符,因此a ++将被视为a,+和+。但是Python期望第一个+运算符之后的数字。因此,它将在a ++上给出语法错误,因为第二个+不是数字。

而++ a则会用以下方式进行解释:

  • Python中的一元+运算符指的是身份运算符。这只是返回整数。这就是为什么它是对整数的身份运算
  • 例如,+ 5的值就是5,而+ -5的值是-5。这是一元运算符,适用于实数
  • ++ a将被解析为+和+ a,但是第二个+ a再次被视为(+ a),因此,+(+(a))简单地计算为a。
  • 因此,即使我们想将a的值增加1,我们也无法使用++符号来实现,因为这种运算符不存在。

因此,我们必须使用+ =运算符进行这种增量。 

a += 1 
a -= 1 
  • 1.
  • 2.

+=操作是如何进行的呢?

您可能会认为,由于存在=符号,因此它可能是赋值语句。但是,这不是常规的赋值语句。这称为增强的赋值语句。(常规赋值操作的Plus版)

在常规赋值语句中,首先计算右侧,然后再将其赋给左侧。 

# 2 + 3 的结果是5,然后才将结果5分配给左边的引用 
a = 2 + 3 
  • 1.
  • 2.

但是,在增强的赋值语句中,首先操作的是左侧,然后计算右侧。这样做是为了使更新后的值可以就地写入左侧。(具体的赋值内存分析后续的文章会涉及到) 

# 读取a的值,然后就地添加3 
a += 3 
  • 1.
  • 2.

这是不使用a = a + 1这样的重新分配语句而增加变量的唯一方法。但是,在这里,总的来说,该选项无关紧要,因为解释器将在运行时优化代码。

 

责任编辑:华轩 来源: 今日头条
相关推荐

2020-07-22 08:01:41

Python开发运算符

2020-07-09 09:56:48

Python语言开发

2019-09-11 09:09:56

++ii++编程语言

2020-10-09 06:48:19

Pythonswitch语句

2021-10-27 07:15:36

Go 循环引用

2021-12-09 10:51:47

Go继承

2021-12-15 07:49:22

Go语言设计

2023-01-28 08:05:32

转换Go泛型

2022-11-16 07:52:11

ORM链式GoFrame字段

2009-03-12 08:42:38

AndroidWMMTK

2021-11-08 11:02:01

Go函数重载

2021-06-11 00:03:31

鸿蒙智能手机

2024-01-01 08:10:40

Go语言map

2024-01-05 08:45:35

Go语言map

2024-05-28 08:55:52

2024-01-31 23:47:17

i++++i编码

2021-02-01 13:53:53

StringlongJava

2009-03-11 17:32:22

联发科WMAndroid

2021-01-22 15:31:47

JavaSwitchString

2021-07-13 08:09:34

微博推特评论
点赞
收藏

51CTO技术栈公众号