为什么Python中没有++和——运算符?
当前回答
操作符的++类是带有副作用的表达式。这在Python中通常是找不到的。
出于同样的原因,赋值在Python中不是表达式,从而防止使用here */}习语来使用常见的if (a = f(…)){/*。
最后,我怀疑这些操作符与python的引用语义不太一致。请记住,Python没有C/ c++中已知语义的变量(或指针)。
其他回答
我一直认为这与python的禅意有关:
应该有一种——最好只有一种——明显的方法来做到这一点。
x++和X +=1做的是完全相同的事情,所以没有理由同时拥有两者。
我相信这源于Python的信条“显式优于隐式”。
其他答案描述了为什么迭代器不需要它,但有时它在赋值以inline增加变量时很有用,你可以使用元组和多次赋值达到相同的效果:
B = ++a变成:
a,b = (a+1,)*2
b = a++变成:
a,b = a+1, a
Python 3.8引入了赋值:=操作符,允许我们用
foo(a:=a+1)
Foo (a++)仍然是难以捉摸的。
首先,Python只是间接地受到C的影响;它深受ABC的影响,ABC显然没有这些操作符,所以在Python中找不到它们也不足为奇。
其次,正如其他人所说,递增和递减已经由+=和-=支持。
第三,对++和——操作符集的完全支持通常包括对它们的前缀和后缀版本的支持。在C和c++中,这可能会导致各种“可爱的”构造,这些构造(对我来说)似乎违背了Python所信奉的简单和直接的精神。
例如,while C语句while(*t++ = *s++);对于一个有经验的程序员来说,它可能看起来简单而优雅,但对于一个初学者来说,它一点也不简单。加上前缀和后缀的增量和减量的混合,甚至许多专业人士也不得不停下来思考一下。
操作符的++类是带有副作用的表达式。这在Python中通常是找不到的。
出于同样的原因,赋值在Python中不是表达式,从而防止使用here */}习语来使用常见的if (a = f(…)){/*。
最后,我怀疑这些操作符与python的引用语义不太一致。请记住,Python没有C/ c++中已知语义的变量(或指针)。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用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中获得所有直接子目录