您的位置:首页 > 编程语言 > Python开发

python3.0 对python2.x 升级后重大语法变动

2010-06-28 18:54 543 查看
转自:http://hi.baidu.com/jxq61/blog/item/ad39b7d8a8705dd0b7fd48a2.html

python 2.4 与 python 3.0 的比较

一、 print 从语句变为函数

原: print 1, 2+3

改为: print ( 1, 2+3 )

二、range 与 xrange

原 : range( 0, 4 )

结果 是 列表 [0,1,2,3 ]

改为:list( range(0,4) )


原 : xrange( 0, 4 )

适用于 for 循环的变量控制

改为:range(0,4)


三、字符串

原: 字符串以 8-bit 字符串

存储

改为: 字符串以 16-bit Unicode 字符串

存储

四、try except 语句的变化

原: try:


......


except Exception, e :


......


改为

try:


......


except Exception as
e :


......


五、打开文件


原: file( ..... )


或 open(.....)


改为:

只能用 open(.....)


六、从键盘录入一个字符串

原: raw_input( "提示信息" )


改为: input( "提示信息" )

七、bytes 数据类型


A bytes object is an immutable array. The items are 8-bit bytes, represented by integers in the range 0 <= x < 256.

bytes 可以看成是“字节数组”对象,每个元素是 8-bit 的字节,取值范围 0~255。

由于在 python 3.0中字符串以 unicode 编码存储,当写入二进制文件时,字符串无法直接写入(或读取),必须以某种方式的编码为字节序列后,方可写入。

(一)字符串编码(encode) 为 bytes

例: s = "张三abc12"


b = s.encode
( 编码方式)


# b 就是 bytes 类型的数据

# 常用的编码方式为 : "uft-16" , "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等

# 注 : 当字符串不能编码为指定的“编码方式”时,会引发异常

(二) bytes 解码(decode)为字符串

s = "张三abc12"


b = s.encode( "gbk") #
字符串 s 编码为 gbk 格式的字节序列


s1 = b.decode
("gbk") # 将字节序列 b以gbk格式 解码为字符串



# 说明,当字节序列不能以指定的编码格式解码时会引发异常

(三)使用方法举例

#coding=gbk


f = open("c://1234.txt", "wb")

s = "张三李四abcd1234"

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

# 在 python2.4 中我们可以这样写:

# f.write( s )

# 但在 python 3.0中会引发异常

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

b = s.encode("gbk")

f.write( b )

f.close()


input("?")


读取该文件的例子:

#coding=gbk


f = open("c://1234.txt", "rb")

f.seek(0,2) #定位至文件尾

n = f.tell() #读取文件的字节数

f.seek(0,0) #重新定位至文件开始处

b = f.read( n )

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

# 在 python 2.4 中 b 是字符串类型

# 要 python 3.0 中 b 是 bytes 类型

# 因此需要按指定的编码方式确码

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

s = b.decode("gbk")

print ( s )

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

# 在 python 2.4 中 可以写作 print s 或 print ( s )

# 要 python 3.0 中 必须写作 print ( s )

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

f.close()

input("?")


运行后应显示:

张三李四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.0

10 / 3
结果为 3.3333333333333335


10 // 3
结果为 3


十、字节数组对象 --- 新增

(一) 初始化

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

(六) 字节数组可用于写入文本文件


#coding=gbk


f = open("c://1234.txt", "wb")

s = "张三李四abcd1234"

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

# 在 python2.4 中我们可以这样写:

# f.write( s )

# 但在 python 3.0中会引发异常

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

b = s.encode("gbk")


f.write( b )

c=bytearray
( "王五","gbk")

f.write( c )

f.close()


input("?")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: