python 2.x 与 python 3.x 的比较

python 2.x 与 python 3.x 的比较

转自http://rookiedong.iteye.com/blog/1185403
- 1、print 从语句变为函数

原: print 1, 2+3
改为: print ( 1, 2+3 )


  • 2、range 与 xrange

原 : range( 0, 4 ) 结果 是 列表 [0,1,2,3 ]
改为:list( range(0,4) )
原 : xrange( 0, 4 ) 适用于 for 循环的变量控制
改为:range(0,4)

  • 3、字符串

    原: 字符串以 8-bit 字符串存储
    改为: 字符串以 16-bit Unicode 字符串存储

  • 4、try except 语句的变化

    原: try:
    ……
    except Exception, e :
    ……
    改为
    try:
    ……
    except Exception as e :
    ……

  • 5、打开文件

    原: file( ….. )
    或 open(…..)
    改为:
    只能用 open(…..)

  • 6、从键盘录入一个字符串

    原: raw_input( “提示信息” )
    改为: input( “提示信息” )

  • 7、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

  • 8、 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

  • 9、 除法运算符

    python 2.4.2以前
    10/3 结果为 3
    python 3.0
    10 / 3 结果为 3.3333333333333335
    10 // 3 结果为 3

  • 10、字节数组对象 — 新增

    (一) 初始化
    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("?")


  • RookieDong的补充
    1,“import thread”问题,2.x中的模块thread在3.x中编程”_thread”(需要在前面加一个下划线).否则会出现“ImportError: No module named thread
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值