Python与C++特性区别

Python与C++特性区别

一直很关注手持设备上的软件设计,可是由于手持设备的操作系统繁杂,而j2me的开发因为手机开发商装备的类库不同又是大同小异 而苦恼。最近看到了一篇文章讲述微软发布了一款IronPython的开源环境,遂下载过来看了一下。感觉不错,个人认为开源才是使得软件在不同操作系统 上的界面消除的最终办法。
PS:我使用的教材是《简明Python教程》

Python和其他语言的不同
1)变量的使用
在Py里,变量不需要像C++或者Java或者C#中那样,需要先声明,后使用。而是在第一次使用的时候就是声明的时候。并且,类型是由被赋值的数值决定的,并且因为变量的类型是动态绑定的,所以变量可以跨类型赋值。比如:
i=5
print i
print 'type is',type(i)
i='abc'
print i
print 'now is',type(i)

运行结果:
5
type is <type 'int'>
abc now is <type 'str'>
如果想要删除一个变量,只要del它就行,比如del i.注意Py是区分大小写的
2)语句块的使用
在C++或者C#,Java里,我们使用"{", "}"大括号来分隔某一个语句块。而在Py里分隔语句块是不用大括号的,而是使用在C++等语言中修饰代码风格的缩放来分隔语句块。下面看看一段代码:
int i
print i

以上的写法是错误的,因为在第二句的前边空出了一个制表符。 缩进在Py里代表了两层意思:

 

  • 一是用来分隔语句块
  • 二是强制使用良好的代码风格

 

以上两个特点是与经典的静态语言最大的不同,如果忽视了这两点,Py是进行不下去的。
3)控制流的不同
在经典的计算机语言里,控制流通常都是不可或缺的一个有机组成部分,它是结构化语言的一个特征。在Py里也不例外,它含有if,while,for语句 (没有switch,但是可以用字典来代替)。除了最后一个for语句,其余的两个语句的用法和C++大同小异,不过时刻注意的是,在Py里,是没有大括 号来用的,要时刻注意缩放的位置,其实这对于一个平时有良好编程习惯的程序员来说是一个好消息。
在Py里,布尔型有True,False.可以理解为1或者0,但是绝对不能认为在任何情况下等同,
if语句:

if 布尔型变量:
statment....
elif 布尔型变量:
statment....
:
:
:
else:
statment....


注意,在判断的最后要以冒号":"结束。记住,在Py里if是严格按照缩放匹配的,而不是C++那样按照就近原则匹配。比如如下程序:
str1=raw_input('input str1')
str2=raw_input('input str2')
if str1=='a':
if str2=='b':
print 'ok!'
else:
print 'str wrong!'


输入a c,则str wrong是不会出现的。但是输入b c,str wrong是会出现的,也就是说,这个else是按照缩放与最顶层的if匹配而不是与最近的一个if匹配,这点是较C++上的一个进步。也为用if语句块 代替switch提供了很好的理由。

while语句:
while 某一个布尔值
statment...
else:
stament...


while语句和C++差不多,只不过在最后边多了一个else语句,个人认为这个else从某种程度上是用来代替c++中do-while形式的循环的。

for循环:
Py中的for循环是与C++中差别最大的一个结构,它与C#中的foreach类似,即在一个集合中遍历集合中所有的元素比如:

for i in A['A','B','C','D']:
print i
else:
print 'The for loop is over'


for的作用就是把A中的元素逐一取出然后操作。
break和continue关键字在Python中的作用和在C++中的作用相当,不过还是那句话,要注意缩进!

函数的不同:
函数是一个比较重要的概念,因为它可以帮我们重用所写的代码。
和前面说的一样,Py使用了缩放代替了以前的大括号来限定代码。

def sayHello():
str='Python'

print 'Hello World!',str


void sayHello()//C++形式
{
char* str="C++";
cout<<"Hello World!"<<str;
}

以上就是使用了缩放限定了代码,调用的时候,直接调用它就可以了,再来对比一下他们的语法。
返回值:Py没有指定返回值,这个很明显,因为Py对变量的类型并不敏感,包括空,所以,返回值或者不返回值,对于Py函数来说都是一样的。而C++有严格的数据类型指定。在返回值上,我们可以像C++那样,使用return返回。
传值与传址:在C++中可以使用&或者*来达到传址的目的,可是在Py里是不能这么做的,而是使用global关键字限定某一个变量的作用域不是函数内,而是从外边传过来的,这样就起到了“传址”的目的。
重载:在C++里,重载的依据是形参的类型和个数,因为Py里对变量的类型并不敏感,还有因为编译器实现的难度上来说,必须构造不定参数才能达到这种目的的重载。


===
明天继续