为什么Python中没有++和——运算符?
当前回答
操作符的++类是带有副作用的表达式。这在Python中通常是找不到的。
出于同样的原因,赋值在Python中不是表达式,从而防止使用here */}习语来使用常见的if (a = f(…)){/*。
最后,我怀疑这些操作符与python的引用语义不太一致。请记住,Python没有C/ c++中已知语义的变量(或指针)。
其他回答
因为,在Python中,整数是不可变的(int's +=实际上返回一个不同的对象)。
同样,使用++/——,您需要考虑前后的递增/递减,并且只需要多击一次键就可以写出x+=1。换句话说,它以很少的收益为代价避免了潜在的混乱。
操作符的++类是带有副作用的表达式。这在Python中通常是找不到的。
出于同样的原因,赋值在Python中不是表达式,从而防止使用here */}习语来使用常见的if (a = f(…)){/*。
最后,我怀疑这些操作符与python的引用语义不太一致。请记住,Python没有C/ c++中已知语义的变量(或指针)。
首先,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中,它只是邪恶,并尽可能避免。
正如我理解的那样,你不会认为内存中的值被改变了。 在c语言中,当你执行x++时,内存中的x值会发生变化。 但在python中,所有数字都是不可变的,因此x指向的地址仍然是x而不是x+1。当你写x++时,你会认为x改变了,实际上发生的是x引用被改变到内存中存储x+1的位置,或者如果doe不存在,重新创建这个位置。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录