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

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)