print 从语句变为函数

#python 2.x
print 1,2+3 
#python 3.x   
print(1,2+3)

range 与 xrange

在python3.x中,range 与 xrange合并为range,如果再使用xrange会报错

>>> xrange(0,4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not defined

字符串

#python 2.x 字符串以 8-bit 字符串存储
#python 3.x 字符串以16-bit Unicode 字符串存储

try except 语法

#python 2.x
try:
    do_something()
except Exception, e :
    pass
#python 3.x
try:
    do_something()
except Exception as e :
    pass

打开文件

#python 2.x
file()或open()
#python 3.x
open()

从键盘读取一个字符串

#python 2.x
raw_input("提示信息")
#python 3.x
input("提示信息")

bytes 数据类型

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

字符串str编码(encode) 为 bytes

s = "张三abc12"
b = s.encode( 编码方式)
# b 就是 bytes 类型的数据
# 常用的编码方式为 : "uft-16"    , "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等
# 注 : 当字符串不能编码为指定的“编码方式”时,会引发异常

bytes 解码(decode)为字符串str

s = "张三abc12"
b = s.encode("gbk")   # 字符串 s 编码为 gbk 格式的字节序列
s1 = b.decode("gbk")   # 将字节序列 b以gbk格式 解码为字符串
# 说明,当字节序列不能以指定的编码格式解码时会引发异常

example:

#coding=gbk
f = open("c:\\1234.txt", "wb")
s = "张三李四abcd1234"
# -------------------------------
# 在 python2.x中我们可以这样写:
# f.write(s)
# 但在 python 3.x中会引发异常
# 必须要先编码
# -------------------------------
b = s.encode("gbk")
f.write(b)
f.close()
f = open("c:\\1234.txt", "rb")
f.seek(0,2) #定位至文件尾
n = f.tell() #读取文件的字节数
f.seek(0,0) #重新定位至文件开始处
b = f.read(n)
# ------------------------------
# 在 python 2.x 中 b 是字符串类型
# 要 python 3.x 中 b 是 bytes 类型
# 因此需要按指定的编码方式解码
# ------------------------------ 
s = b.decode("gbk")
print(s)
f.close()
运行后应显示:
张三李四abcd1234

注意: bytes序列,一旦生成,其内容是不可变的

s="ABCD"
b=s.encode("gbk")
print(b[0])  # 显示   65
b[0] = 66   # 执行该句,出现异常: 'bytes' object does not support item assignment

chr(K) 与 ord(c)

#python 2.4.2以前
#chr(K)   #将编码K 转为字符,K的范围是 0 ~ 255
#ord(c)   #取单个字符的编码, 返回值的范围: 0 ~ 255
#python 3.0
#chr(K)   #将编码K 转为字符,K的范围是 0 ~ 65535
#ord(c)   #取单个字符的编码, 返回值的范围: 0 ~ 65535

除法运算符

#python 2.4.2 之前
 10/3      #结果为 3 
#python 3.x
10/3    #结果为 3.3333333333333335
10//3   #结果为 3

python3.x新增字节数组对象

初始化

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

字节数组是可变的

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

字节数组的切片仍是字节数组

字符串转化为字节数组

#coding=gbk
s ="你好"
b = s.encode( "gbk")     # 先将字符串按某种“GBK”编码方式转化为 bytes
c = bytearray(b)          #再将 bytes 转化为 字节数组
#等价于
c = bytearray( "你好","gbk")

字节数组转化为字符串

c = bytearray(4)
c[0]=65 
c[1]=66
c[2]=67
c[3]=68
s = c.decode("gbk")
print(s)
# 输出:ABCD

thread模块

2.x中的模块thread在3.x中改名为”_thread”(需要在前面加一个下划线).否则会报错:”ImportError: No module named thread”

>>> import thread
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'thread'
>>> import _thread