Python2.X和Pyhon3.X的语法区别

1print函数:

       (1)2.X

       print函数后面加一个空格,然后直接写上要输出的内容。输出的内容可以是任何的Python数据,包括None。例如:

       a=10

       b=’xyz’

       c=None

       print a,b,c

       (2)3.X

       print函数后面要把输出的内容用圆括号括起来,例如:

       a=10

       b=’xyz’

       c=None

       print (a,b,c)

 

2input函数

       (1)2.X

       有两个输入函数分别是input()和raw_input()。

①Input()函数只能输入数值,既可以是整数也可以是浮点数,但不能输入字符串,输入的信息按照数值类处理,例如:

x=input(‘please input a number:’)

假如你输入的是10,那么x这个变量就是10这个数。如果你输入abc,此时会报错

②raw_input()函数可以输入字符和数字,但结果都按照字符串处理,例如:

x=raw_input(‘please input your info:’)

假如你输入的是10,那么x这个变量就是’10’这个字符串。如果你输入abc,x变量就是’abc’这个字符串。

       (2)3.X

       只有一个input()函数,含义等同于2.X的raw_input(),也就是说无论输入什么内容都按字符串处理。例如:

x=input(‘please input your info:’)

假如你输入的是10,那么x这个变量就是’10’这个字符串。如果你输入abc,x变量就是’abc’这个字符串。

注意:如果你需要输入数值怎么办呢,需要用强制转换,int()或float(),例如:

x=int(input(‘please input a number:’))

此时如果你输入10,x这个变量就是10这个数值,如果输入abc,会报错,特别要注意到的是输入9.8(浮点数)时也会报错。

再例如:

x=float(input(‘please input a number:’))

此时如果你输入9.8,x就是9.8这个数值,如果输入10,x就是10.0,而不会报错,但是如果输入abc,程序报错。

3、网络发送和接收函数send() recv()sendto()recvfrom()

       (1)2.X

       可以直接发送和接收字符串,不用编码和解码,例如

       data=clientsock.recv(1024)

       print(data)

       此时的data就是一个字符串,如果套接字收到hello信息,data就是’hello’这个字符串。

       再例如:

       data=’nice to meet you’

       clientsock.send(data)

       就可以了。

       recvfrom和sendto也是一样。

       (2)3.X

       send和sendto时需要对字符串进行编码操作(encode),recv和recvfrom时需要对收到的数据进行解码操作,例如:

       data=clientsock.recv(1024) #此时的data是一个字节序列,不是字符串

       print(data.decode())#要输出这个内容需要使用decode方法进行解码。

       再例如:

       data=’nice to meet you’

       clientsock.send(data.encode())#发送时,需要对字符串进行编码

4、异常处理try……except的格式

       (1)2.X

格式是:

              try:

                     clientsock.send(data)

              except Exceptioin,e:

                     print(‘error’)

注意红色字体部分和3.X不同

       (2)3.X

格式是:

              try:

                     clientsock.send(data)

              except  Exceptioin  as  e:

                     print(‘error’)

      注意:当没有Exception时,2.X和3.X的格式是一样的。

 

5、有些系统包的名称不同,例如2.X里有一个SocketServer的包,注意它含两个大写的S,而在3.X中这个包的名称为socketserver。当这种情况出现时,可以使用搜索的方式找到相关的数据包,对应好它们在不同环境下的名称就行了。

6、2.X不直接支持中文,如果需要用中文时,需要加载编码,3.X可以直接支持中文。