美文网首页
python 两个版本的比较 2018-11-24

python 两个版本的比较 2018-11-24

作者: 11的雾 | 来源:发表于2018-11-24 21:11 被阅读0次

    python 两个版本的比较

    python 3.4.1和python 2.4.1
    版本升到3之后print后要加括号() 而且raw_input也取消了,只能用input了
    上课
    Python的新版本会引入新的功能,但是,实际上这些功能在上一个老版本中就已经存在了。要“试用”某一新的特性,就可以通过导入future模块的某些功能来实现。
    例如,Python 2.7的整数除法运算结果仍是整数:

    >>> 10 / 3
    3
    

    但是,Python 3.x已经改进了整数的除法运算,“/”除将得到浮点数,“//”除才仍是整数:

    >>> 10 / 3
    3.3333333333333335
    >>> 10 // 3
    3
    

    要在Python 2.7中引入3.x的除法规则,导入future的division:

    >>> from __future__ import division
    >>> print 10 / 3
    3.3333333333333335
    

    当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到future中,以便旧的代码能在旧版本中测试新特性。

    from __future__ import unicode_literals
    
    s = 'am I an unicode?'
    print isinstance(s, unicode)
    

    (1)部分返回值用view和Iterator取代了list

    • dict的有些方法不再返回list,以前dict的dict.keys(),dict.items(),dict.values()是返回list的,现在变为返回views。比如以前用k=d.keys();k.sort(),现在改用:k=sorted(d)
    • 去掉了dict的部分方法,dict.iterkeys(),dict.iteritems(),dict.itervalues()
    • map()和filter()返回迭代器了
    • range()变成以前的xrange()
    • zip()返回迭代器了
      (2)带排序的比较
    • 简化了待排序的比较
    • builtin.sorted()和list.sort()不再支持cmp作为参数,而改为key
    • 取消了cmp()和cmp(),改用it(),以及用带hash()的eq()实现更加复杂的比较
      (3)整型变量
    • long改为int
    • 类似于1/2这样的表达式返回float变量
    • 去掉了sys.maxint
    • represent()返回的值不再包含L后缀
    • 八进制数值,不再是0720的形式,而变成0o720
      (4)Unicode和8位字节的区别变为文本和数据的区别
    • 从之前的Unicode字符串(unicode)和8位的字符串(str)变为文本的(str)和二进制的数据(bytes)
    • 不能再用u"...",且对于二进制数据用b"..."
    • 文本字符串和二进制数据之间不能再支持混用,需要转换时,可以用对用的str.encode()和bytes.decode(),或者bytes(s,encoding=...)和str(b,encoding=...)
    • 反斜杠在原始字符串中就是字面意思,没有转义的含义。
    • 去除了内置的抽象类型变量basestring而改用str
    • 打开文件后返回的是解码后的Unicode字符串,加上b前缀后返回的是字节数组,所以也无需再用之前的codecs模块了。
    • sys.stdin,sys.stdout和sys.stderr的初始值从io.TextIOBase改为仅支持Unicode字符串,如果想要这些字符流的字节数据,可以使用io.TextIOBase.buffer
    • 文件名当做参数传递进入和返回时也都是Unicode字符串。
    • 部分系统相关的API,比如os.environ和sys.argv,当系统用默认编码无法解析相关的字节时,可能会存在一些问题
    • 字符串的repr()不再返回转义后的非ASCII字符,但仍会转义那些控制字符和非打印符。
    • 默认字符串编码为UTF-8
    • 非ASCII字符不允许用于标识符
    • 去掉了StringIO和cStringIO模块,改为先导入io模块后在引用对应的io.StringIO或io.BytesIO
      更多细节可以参考官网:http://docs.python.org/3/whatsnew/3.0.html#overview-of-syntax-changes

    相关文章

      网友评论

          本文标题:python 两个版本的比较 2018-11-24

          本文链接:https://www.haomeiwen.com/subject/dnayqqtx.html