Python3.x对Python2.x的语法变动

一: print从语句变成函数

原 print 1,2+3 改成 print(1,2+3)>>>1 5

二:range与xrange

原rang(0,4) 结果为列表[0,1,2,3] 改成 list(range(0,4))

远xrange适用于for循环的变量控制,改成range(0,4)

三:字符串

原字符串以8-bit字符串存储,现在改成16-bit Unicode字符存储

四:try...except

原 try
    ...
  except Exception,e
    ...
改成
try
    ...
  except Exception as e
    ...

五:打开文件
原file(...)或open(...),现在只能用后者

六:从键盘录入一个字符串
原raw_input("message")改成input('message')

七:bytes数据类型
bytes改成”字节数组“对象,每个元素是8-bit的字节,取值范围0~255
由于python3中字符串是以unicode编码存储,当写入二进制文件时,字符串无法直接写入(或读取),必须以某种方式编码为字节序列后,方可写入

常用的编码方式:"utf-8","utf-16","gb2312","gbk","ascii","latin1"等,当字符串不能编码为指定的编码方式时,会发生异常

1:字符串编码(encode)为bytes
例:s = "张三abc12"
      b=s.encode("utf-8")       
  print(b)>>>输出b'\xe5\xbc\xa0\xe4\xb8\x89abc123'
      print(b.decode("utf-8"))>>>张三abc12

使用方法举例:

写入

#coding=gbk

f=open("c:\\test.txt","wb")

s="张三1234abcd"

#-------------

#在python2.x中可以这样写:f.write(s)

#-------------

b=s.encode("gbk")
f.write(b)
f.close()

input("?")

读取

#coding=gbk

f=open("c:\\test.txt","rb")
f.seek(0,2)#定位至文件尾
n=f.tell()#读取文件的字节数
f.seek(0,0)#重新定位至文件开始处
b=f.read(n)
#在python2.x中b是字符串类型,而在python3.0中b是bytes类型。因为需要按指定的编码方式编码
s=b.decode("gbk")
print(s)
f.close()

2:bytes序列一旦形成是不可更改的,如

s="ABCD"
b=s.encode("gbk")
print (b[0])   #显示65
b[0]=66 #出错

八:chr(K)与ord(c)

chr(K)将编码K转为字符,K的范围是0~255(2.x),3.0中K得范围是:0~65535

ord(c)取单个字符的编码,返回值范围是0~255(2.x),3.0中c得范围是:0~65535

九:除法运算符

2.x >>> 10/3 => 3

3.0>>>10/3=>3.3333333333333335    10//3=>3

十:字节数组对象——新增

1:初始化
a=bytearray(10)   #a是一个由10个字节组成的数组,其中每个元素是一个字节,类型借用int。此时每个初始值为0

2:字节数组是可变的

a=bytearray(10)
a[0]=25   #可以用赋值语句更改其元素,但所赋的值必须在0~255之间
转换为list:b=list(a)

3:字节数组的切片仍然是字节数组

4:字符串转换成字节数组

s="你好"
b=s.encode("gbk")  #先将字符串按某种编码方式(gbk)转换成bytes
c=bytearray(b)       #再将bytes转化成字节数组
也可以写作:c=bytearray("你好","gbk")

5:字节数组转化成字符串

c=bytearray(4)
 c[0]=65;c[1]=66;c[2]=67;c[3]=68

>>> s=c.decode("gbk")

>>> print(s)

显示:ABCD

6:字节数组可以用于写入文本文件

f=open("c:\\test.txt","wb")
s="张三李四1234abcd"
b=s.encode("gbk")
f.write(b)
c=bytearray("王五","gbk")
f.write(c)
f.close()

原文地址:https://www.cnblogs.com/mumue/p/2465258.html