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) #此处的sys.stderr可以是一个被打开的文件,如f=open("a.txt","a+")中的f,如果在P3中仍然使用 print >>sys.stderr, "fatal error" ,会报TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method'这个错。

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

10.闭包中的func_closure 改为__closure__

python2和python3的不同的更多相关文章

  1. python2 与 python3 urllib的互相对应关系

    urllib Python2 name Python3 nameurllib.urlopen() Deprecated. See urllib.request.urlopen() which mirr ...

  2. 在同一台电脑上同时安装Python2和Python3

    目前Python的两个版本Python2和Python3同时存在,且这两个版本同时在更新与维护. 到底是选择Python2还是选择Python3,取决于当前要使用的库.框架支持哪个版本. 例如:HTM ...

  3. python2与python3在windows下共存

    python有python2(工业版)和python3,有时候我们会希望电脑上既有python2也有python3,!假设我们已经安装好,python2和python3了, 接下来我们找到python ...

  4. Python2.7<-------->Python3.x

    版本差异 from __future__   Python2.7 Python3.x 除法 / // Unicode u''                                       ...

  5. 同时使用python2和Python3

    问题:thrift生成的是python2代码,之前使用的是Python3因此需要同时使用两个版本. 方案:将python3的可执行文件重命名为python3(默认为Python),这样使用pyhton ...

  6. python2 到 python3 转换工具 2to3

    windows系统下的使用方法: (1)将python安装包下的Tools/Scripts下面的2to3.py拷贝到需要转换文件目录中. (2)dos切换到需要转换的文件目录下,运行命令2to3.py ...

  7. windows下同时安装python2与python3

    由于python2与python3并不相互兼容,并且差别较大,所以有时需要同时安装,但在操作命令行时,怎么区别python2与python3呢? 1.下载并安装Python 2.7.9和Python ...

  8. 爬虫入门---Python2和Python3的不同

    Python强大的功能使得在写爬虫的时候显得十分的简单,但是Python2和Python3在这方面有了很多区别. 本人刚入门爬虫,所以先写一点小的不同. 以爬取韩寒的一篇博客为例子: 在Python2 ...

  9. python2 和python3共存下问题

    一.使用python2 or python3 1. 使用python2 $ python xxx.py 2. 使用python3 $ python3 xxx.py 二.脚本调用 /usr/bin/en ...

  10. 融合python2和python3

    很多情况下你可能会想要开发一个程序能同时在python2和python3中运行. 想象一下你开发了一个模块,成百上千的人都在使用它,但不是所有的用户都同时使用python 2和3.这种情况下你有两个选 ...

随机推荐

  1. AWS系列-创建 IAM 用户

    创建 IAM 用户(控制台) 官方文档 https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/introduction.html 通过 AWS ...

  2. 如何打造千万级Feed流系统

    from:https://www.cnblogs.com/taozi32/p/9711413.html 在互联网领域,尤其现在的移动互联网时代,Feed流产品是非常常见的,比如我们每天都会用到的朋友圈 ...

  3. logback -- 配置详解 -- 二 -- <appender>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  4. 10 -- 深入使用Spring -- 5...1 使用Quartz

    10.5.1 使用Quartz JDK为简单的任务调度提供了Timer支持. Quartz是一个任务调度框架.借助于Cron表达式,Quartz可以支持各种复杂的任务调度. 1.下载和安装Quartz ...

  5. 使用webbench做压力测试

    Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.下文介绍的是在Ubu ...

  6. 文件名过滤器FilenameFilter的用法

    Java.io.FilenameFilter是文件名过滤器,用来过滤不符合规格的文件名,并返回合格的文件: 实例1,匹配指定字符结尾的文件 package cn.test; import java.i ...

  7. 原创:Eclipse安装Eclipse Color Themes插件后,编辑器背景颜色被改变

    如题,卸载Eclipse Color Themes插件后,背景颜色还是白色,蛋疼,修改.metadata\.plugins\org.eclipse.core.runtime\.settings中的or ...

  8. JS使用中碰到的一些问题

    settimeout: 1.setTimeout(function () {//这个则会在1秒后进行弹出1 alert(1); }, 1000); 2.setTimeout(alert(1), 100 ...

  9. Qt下libusb-win32的使用(一)打印设备描述符

    主要是在前一篇的基础上,学习libusb-win32的API使用.程序很简单,就是打印指定USB设备的设备描述符(当然其他描述符也是可以的). #include "testlibusb.h& ...

  10. boost::noncopyable介绍

    http://blog.csdn.net/huang_xw/article/details/8248960# boost::noncopyable比较简单, 主要用于单例的情况.通常情况下, 要写一个 ...