`
iamxi
  • 浏览: 192209 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

.python2和python3的区别

阅读更多
最近学习Python,但是网上大部分资料都是2.X版本的,而且我安装的是Python3.1,所以去搜了下2.X和3.X的区别。为了方便,在空间里面留下来。
1.性能
Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可
以取得很好的优化结果。
Py3.1性能比Py2.5慢15%,还有很大的提升空间。
2.编码
Py3.X源码文件默认使用utf-8编码,这就使得以下代码是合法的:
    >>> 中国 = 'china'
    >>>print(中国)
    china
3. 语法
1)去除了<>,全部改用!=
2)去除``,全部改用repr()
3)关键词加入as 和with,还有True,False,None
4)整型除法返回浮点数,要得到整型结果,请使用//
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量
6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
   例如:
     2.X: print "The answer is", 2*2
     3.X: print("The answer is", 2*2)
     2.X: print x,                              # 使用逗号结尾禁止换行
     3.X: print(x, end=" ")                     # 使用空格代替换行
     2.X: print                                 # 输出新行
     3.X: print()                               # 输出新行
     2.X: print >>sys.stderr, "fatal error"
     3.X: print("fatal error", file=sys.stderr)
     2.X: print (x, y)                          # 输出repr((x, y))
     3.X: print((x, y))                         # 不同于print(x, y)!
7)改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随即的 bool值 
8)输入函数改变了,删除了raw_input,用input代替:
   2.X:guess = int(raw_input('Enter an integer : ')) # 读取键盘输入的方法
   3.X:guess = int(input('Enter an integer : '))

9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了
10)新式的8进制字变量,相应地修改了oct()函数。
   2.X的方式如下:
     >>> 0666
     438
     >>> oct(438)
     '0666'
   3.X这样:
     >>> 0666
     SyntaxError: invalid token (<pyshell#63>, line 1)
     >>> 0o666
     438
     >>> oct(438)
     '0o666'
11)增加了 2进制字面量和bin()函数
    >>> bin(438)
    '0b110110110'
    >>> _438 = '0b110110110'
    >>> _438
    '0b110110110'
12)扩展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list
对象和seq是可迭代的。
13)新的super(),可以不再给super()传参数,
    >>> class C(object):
          def __init__(self, a):
             print('C', a)
    >>> class D(C):
          def __init(self, a):
             super().__init__(a) # 无参数调用super()
    >>> D(8)
    C 8
    <__main__.D object at 0x00D7ED90>
14)新的metaclass语法:
    class Foo(*bases, **kwds):
      pass
15)支持class decorator。用法与函数decorator一样:
    >>> def foo(cls_a):
          def print_func(self):
             print('Hello, world!')
          cls_a.print = print_func
          return cls_a
    >>> @foo
    class C(object):
      pass
    >>> C().print()
    Hello, world!
class decorator可以用来玩玩狸猫换太子的大把戏。更多请参阅PEP 3129
4. 字符串和字节串
1)现在字符串只有str一种类型,但它跟2.x版本的unicode几乎一样。

2)关于字节串,请参阅“数据类型”的第2条目
5.数据类型
1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long
2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:
    >>> b = b'china'
    >>> type(b)
    <type 'bytes'>
str对象和bytes对象可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化。
    >>> s = b.decode()
    >>> s
    'china'
    >>> b1 = s.encode()
    >>> b1
    b'china'
3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有
dict.has_key(),用 in替代它吧
6.面向对象
1)引入抽象基类(Abstraact Base Classes,ABCs)。
2)容器类和迭代器类被ABCs化,所以cellections模块里的类型比Py2.5多了很多。
    >>> import collections
    >>> print('\n'.join(dir(collections)))
    Callable
    Container
    Hashable
    ItemsView
    Iterable
    Iterator
    KeysView
    Mapping
    MappingView
    MutableMapping
    MutableSequence
    MutableSet
    NamedTuple
    Sequence
    Set
    Sized
    ValuesView
    __all__
    __builtins__
    __doc__
    __file__
    __name__
    _abcoll
    _itemgetter
    _sys
    defaultdict
    deque
另外,数值类型也被ABCs化。关于这两点,请参阅 PEP 3119和PEP 3141。
3)迭代器的next()方法改名为__next__(),并增加内置函数next(),用以调用迭代器的__next__()方法
4)增加了@abstractmethod和 @abstractproperty两个 decorator,编写抽象方法(属性)更加方便。
7.异常
1)所以异常都从 BaseException继承,并删除了StardardError
2)去除了异常类的序列行为和.message属性
3)用 raise Exception(args)代替 raise Exception, args语法
4)捕获异常的语法改变,引入了as关键字来标识异常实例,在Py2.5中:
    >>> try:
    ...    raise NotImplementedError('Error')
    ... except NotImplementedError, error:

    ...    print error.message
    ...
    Error
在Py3.0中:
    >>> try:
          raise NotImplementedError('Error')
        except NotImplementedError as error: #注意这个 as
          print(str(error))
    Error
5)异常链,因为__context__在3.0a1版本中没有实现
8.模块变动
1)移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。
2)移除了imageop模块
3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, 
rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块
4)移除了bsddb模块(单独发布,可以从http://www.jcea.es/programacion/pybsddb.htm获取)
5)移除了new模块
6)os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下
7)tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize()
9.其它
1)xrange() 改名为range(),要想使用range()获得一个list,必须显式调用:
    >>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2)bytes对象不能hash,也不支持 b.lower()、b.strip()和b.split()方法,但对于后两者可以使用 b.strip(b’ 
\n\t\r \f’)和b.split(b’ ‘)来达到相同目的
3)zip()、map()和filter()都返回迭代器。而apply()、 callable()、coerce()、 execfile()、reduce()和reload
()函数都被去除了

现在可以使用hasattr()来替换 callable(). hasattr()的语法如:hasattr(string, '__name__')

4)string.letters和相关的.lowercase和.uppercase被去除,请改用string.ascii_letters 等
5)如果x < y的不能比较,抛出TypeError异常。2.x版本是返回伪随机布尔值的
6)__getslice__系列成员被废弃。a[i:j]根据上下文转换为a.__getitem__(slice(I, j))或 __setitem__和
__delitem__调用
7)file类被废弃,在Py2.5中:
    >>> file
    <type 'file'>
在Py3.X中:
    >>> file
    Traceback (most recent call last):
    File "<pyshell#120>", line 1, in <module>
       file
    NameError: name 'file' is not defined
分享到:
评论

相关推荐

    ms-python.python-2024.2.1.vsix

    ms-python.python-2024.2.1.vsix

    3.python导入数据表.zip

    3.python导入数据表.zip3.python导入数据表.zip3.python导入数据表.zip3.python导入数据表.zip3.python导入数据表.zip3.python导入数据表.zip3.python导入数据表.zip3.python导入数据表.zip3.python导入数据表.zip3....

    8.python查看空值.zip

    8.python查看空值.zip8.python查看空值.zip8.python查看空值.zip8.python查看空值.zip8.python查看空值.zip8.python查看空值.zip8.python查看空值.zip8.python查看空值.zip8.python查看空值.zip8.python查看空值.zip...

    Boost.Python文档

    2. **类型转换**:Boost.Python自动处理C++和Python之间的类型转换。它可以将Python的内置类型(如int、str)转换为相应的C++类型,反之亦然。对于复杂的数据结构,如自定义类,你需要定义特殊的转换规则,以便Boost...

    9.python查看唯一值.zip

    9.python查看唯一值.zip9.python查看唯一值.zip9.python查看唯一值.zip9.python查看唯一值.zip9.python查看唯一值.zip9.python查看唯一值.zip9.python查看唯一值.zip9.python查看唯一值.zip9.python查看唯一值.zip9....

    0026. python 快速排序教程.md

    0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程.md 0026. python 快速排序教程....

    4. Python 文件与模块.ipynb

    python 4. Python 文件与模块.ipynb 4. Python 文件与模块.ipynb 4. Python 文件与模块.ipynb 4. Python 文件与模块.ipynb4. Python 文件与模块.ipynb4. Python 文件与模块.ipynb 4. Python 文件与模块.ipynb 4. ...

    python2.x和python3.x的区别

    ### Python2.x与Python3.x的主要区别 Python作为一门广泛使用的高级编程语言,自1991年首次发布以来经历了多次重大更新。其中最显著的变化发生在Python 2.x到Python 3.x的过渡期间。这一过渡不仅涉及语法层面的变动...

    [Python3基础教程].LYNDA.COM.PYTHON.3.ESSENTIAL.TRAINING-JGTiSO.iso

    在本教程里, Bill Weinman 致力于教给大家怎样用 python 3 来创造出完美设计的脚本和管理已经存在的项目。 本教程覆盖了基本的python3的语法和用法,包括高级特性比如面向对象,扩展和异常。 教程中示范项目包括了...

    Black.Hat.Python.Python.Programming.for.Hackers.pdf

    Black.Hat.Python.Python.Programming.for.Hackers.pdf python hacker programming

    python的python的python

    pythonpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txt...

    3. Python 面向对象编程.ipynb

    3. Python 面向对象编程.ipynb3. Python 面向对象编程.ipynb 3. Python 面向对象编程.ipynb 3. Python 面向对象编程.ipynb 3. Python 面向对象编程.ipynb 3. Python 面向对象编程.ipynb 3. Python 面向对象编程....

    Core.Python.Programming.2nd.Edition

    Core.Python.Programming.2nd.Edition python核心编程 2版本,kindle版本

    python2.x与python3.x的区别

    Python 2.x 和 Python 3.x 之间存在显著的区别,这些差异主要体现在语法、数据类型、函数和模块等方面。Python 3.x 是 Guido van Rossum 对 Python 语言的一次重大更新,旨在解决一些遗留问题并引入新特性,尽管这...

    Understanding.Network.Hacks.Attack.and.Defense.with.Python

    Chapter 3 Python Basics Chapter 4 Layer 2 Attacks Chapter 5 TCP/IP Tricks Chapter 6 WHOIS DNS? Chapter 7 HTTP Hacks Chapter 8 Wifi Fun Chapter 9 Feeling Bluetooth on the Tooth Chapter 10 Bargain Box ...

    python练习题Question3.txt

    python练习题Question3.txtpython练习题Question3.txtpython练习题Question3.txtpython练习题Question3.txtpython练习题Question3.txtpython练习题Question3.txtpython练习题Question3.txtpython练习题Question3.txt...

    python.txtpython.txt

    pythonpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txt...

    Packt.Computer.Vision.with.Python.3.2017

    Packt.Computer.Vision.with.Python.3.2017 Packt.Computer.Vision.with.Python.3.2017 Packt.Computer.Vision.with.Python.3.2017

    boost.python 编写扩展python库

    环境 vs2008 构建 python26 boost_1_44 使用boost.python 编写扩展python库,使用mfc例子调用扩展的python库。 ...文件夹中的dll和lib等文件是 boost.python库的动态库和lib的release和debug版。

    Manning.Python与Tkinter编程.pdf

    Manning.Python与Tkinter编程,由于文件较大,所以分成2个压缩包,这是第一个

Global site tag (gtag.js) - Google Analytics