细数Python与C++的区别(更新中……)
来源:互联网 发布:java的反射如何实现 编辑:程序博客网 时间:2024/05/18 07:34
Python与C/C++有不少区别,其中一些很容易疏忽,导致程序出错。这里列了一些,供大家参考。持续更新中……
Python没有自增自减运算符
C/C++中有++i、i++、--i、i--。而Python则没有这些运算符。C/C++的一个常见循环是:
for (int i = 0; i < 10; ++i){ std::cout << i << endl;}而Python对应的循环为:
for i in range(10): print (i)也许这是Python不提供自增自减运算符的一个重要原因:没有这么常见的use case。如果真的需要,大多数情况下可以用i += 1,i -= 1来代替。
注意,虽然Python不支持++运算符,但++i并不会报错。++i被解释为+(+(i))。
>>>> i = 3>>> ++i3>>> i++SyntaxError: invalid syntax
Python函数永远有返回值
C/C++中一个常见错误:"Not all control paths return a value"。如果有任何一条路径没有返回值,会报错。// Error: not all control paths returnsint f(bool flag){ if (flag) { return 1; }}但对应的Python程序没有任何问题:
def f(flag): if flag: return 1>>> print (f(True))>>> 1>>> print (f(False))>>> None
虽然Python不会报错,但还是建议在函数有返回值的情况下显式return None。这样,其他人看到这段代码时不会困惑:作者的本意到底是要依赖隐式的return来返回None呢,还是忘了return一个值?
作用域
C/C++中for loop循环变量的作用域仅限于for及对应的{}本身,for结束后该作用域消失。for (int i = 0; i < 10; ++i){ ..}// v--- undeclared variable "i"if (i == 10)..Python中,for语句(以及while、if等)没有自己单独的作用域。循环变量i的作用域就是包含它的函数f的作用域。
def f(): for i in range(10): .. // Ok! if i == 10: ..再看一个例子。a的作用域是包含它的{},出了右括号,作用域消失。这是个显而易见的错误。
if (condition){ int a = 1;}// Error!std::cout << a;而Python作为一种动态语言,完全支持这样的使用。事实上,一个名字只要在使用前赋过值,就可以使用。
if condition: a = 1// Ok!print (a)
for循环的最后一个值
经常会遇到这样的情况,一个循环结束后需要看一下它是如何结束的。一个方法是看看循环变量i的最后值是多少。如果等于10,表明条件found没有发生过。可以这样做是因为C++在每次循环结束后会++i,即使是最后一次循环。int i;for (i = 0; i < 10; ++i){ .. if (found) break}// Not foundif (i == 10)..而由于Python有着不同的循环方式,导致循环变量的最后值是range范围内的最大有效值9,而非10。
for i in range(10): if found: breakelse: # Not found ..print (i) # 9
更新中……
1 0
- 细数Python与C++的区别(更新中……)
- C与C++的区别。持续更新中……
- Django模板标签中与Python语法的不同(更新中……)
- python2 与Python 3 的区别(持续更新...)
- Python 与 C 区别
- C++(C)中Sizeof与Strlen的区别
- Python中,match 的<.*>与<.*?>的区别
- 细数C++和C的区别
- 查找输入的十个数中与已知数相同的数(c语言)
- Python中raw_input()与input()的区别
- (转)PyCharm中Directory与Python package的区别
- Python中range与xrange的区别
- Python中raw_input() 与 input() 的区别
- python 中 str() 与 repr() 的区别
- Python中type与Object的区别
- python中raw_input() 与 input() 的区别
- Python中range 与 xrange的区别
- python中str()与repr()的区别
- Flickr Architecture
- 矩阵相乘这个代码也应该是需要掌握的内容,今天一大早就写了一下
- Java技术1-线程池
- 人格的五因素模型
- 桌面虚拟化实施遇到的基本问题
- 细数Python与C++的区别(更新中……)
- 老外被中国app惊呆了
- Diskpart工具应用两则:MBR/GPT分区转换 & 基本/动态磁盘转换
- #Paper Reading# The Link Prediction Problem for Social Networks
- presentViewController弹出一个半透明的UIViewController
- Java与c++的一些同异
- 基于java的rpc技术原理
- (1)字符串压缩xxxyyy->3x3y
- 我在华为20年之小趣事回忆