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

来源:互联网 发布:akm4376音质知乎 编辑:程序博客网 时间:2024/05/22 04:45

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
    阅读全文
    '); })();
    0 0
    原创粉丝点击
    热门IT博客
    热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 颤栗之花 颤栗航班 颤栗的意思 颤栗的琴弦 颤栗乐园 如影随形 总裁抱着边走边律动颤栗快 颤藻 颤藻是原核生物吗 颤音 魔鬼的颤音 颤音怎么唱 颤音练习 颤音琴 钢琴颤音 生活的颤音 如何发出颤音 唱歌如何颤音 唱歌有颤音怎么办 古筝颤音怎么弹 唱歌时颤音怎么练 唱歌尾音颤音怎么发音 颤多音字组词 5分钟让你学会颤音 3分钟让你学会颤音 怎样才能唱出颤音 初学者怎样唱出颤音 颧部 颧弓 颧怎么读 颧怎么读音 降颧弓 颧骨跟颧弓 颧弓整型 收颧弓 颧弓内推前后对比照 降低颧弓 颧骨高颧弓宽 磨削颧弓 颧弓填充 颧骨颧弓修复 磨颧骨颧弓