为什么Python中没有++和——运算符?


当前回答

首先,Python只是间接地受到C的影响;它深受ABC的影响,ABC显然没有这些操作符,所以在Python中找不到它们也不足为奇。

其次,正如其他人所说,递增和递减已经由+=和-=支持。

第三,对++和——操作符集的完全支持通常包括对它们的前缀和后缀版本的支持。在C和c++中,这可能会导致各种“可爱的”构造,这些构造(对我来说)似乎违背了Python所信奉的简单和直接的精神。

例如,while C语句while(*t++ = *s++);对于一个有经验的程序员来说,它可能看起来简单而优雅,但对于一个初学者来说,它一点也不简单。加上前缀和后缀的增量和减量的混合,甚至许多专业人士也不得不停下来思考一下。

其他回答

我对python很陌生,但我怀疑原因是因为语言中可变对象和不可变对象之间的强调。现在,我知道x++可以很容易地解释为x = x+ 1,但它看起来像你在原地递增一个对象,而这个对象可能是不可变的。

这只是我的猜测/感觉/预感。

其他答案描述了为什么迭代器不需要它,但有时它在赋值以inline增加变量时很有用,你可以使用元组和多次赋值达到相同的效果:

B = ++a变成:

a,b = (a+1,)*2

b = a++变成:

a,b = a+1, a

Python 3.8引入了赋值:=操作符,允许我们用

foo(a:=a+1)

Foo (a++)仍然是难以捉摸的。

它就是这样设计的。自增和自减运算符只是x = x + 1的快捷方式。Python通常采用一种设计策略,减少执行操作的可选方法的数量。增强赋值是Python中最接近自增/自减操作符的东西,它们直到Python 2.0才被添加。

首先,Python只是间接地受到C的影响;它深受ABC的影响,ABC显然没有这些操作符,所以在Python中找不到它们也不足为奇。

其次,正如其他人所说,递增和递减已经由+=和-=支持。

第三,对++和——操作符集的完全支持通常包括对它们的前缀和后缀版本的支持。在C和c++中,这可能会导致各种“可爱的”构造,这些构造(对我来说)似乎违背了Python所信奉的简单和直接的精神。

例如,while C语句while(*t++ = *s++);对于一个有经验的程序员来说,它可能看起来简单而优雅,但对于一个初学者来说,它一点也不简单。加上前缀和后缀的增量和减量的混合,甚至许多专业人士也不得不停下来思考一下。

除了这里的其他优秀答案之外,++和——也因未定义的行为而臭名昭著。例如,这段代码中发生了什么?

foo[bar] = bar++;

它看起来很无辜,但它是错误的C(和c++),因为您不知道第一个栏是否会增加。一个编译器可能会以一种方式执行,另一个可能会以另一种方式执行,而第三个编译器可能会让恶魔从你的鼻子里飞出来。所有这些都完全符合C和c++标准。

(编辑:c++ 17改变了给定代码的行为,这样它就被定义了;它将等价于foo[bar+1] = bar;+ +酒吧;——尽管如此,这可能不是程序员所期望的。)

在C和c++中,未定义行为被视为不可避免的邪恶,但在Python中,它只是邪恶,并尽可能避免。