最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python哪个版本比较稳定

    正文概述    2020-06-16   441

    python哪个版本比较稳定

    想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个呢?

    python学习网,大量的免费python视频教程,欢迎在线学习!

    python3 和 python2 是不兼容的,而且差异比较大,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的。目前实际应用中大部分暂不考虑 Python3,有的时候注意写兼容 2/3 的代码。用 Python2 为主的写新代码时要考虑以后迁移到 Python3 的可能性。据数据统计显示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。

    其实python是linux上最常用的软件之一,但是linux目前的版本大部分还是使用python2的,而且,在linux上依赖python2的程序更多一些,所以 Python3 要代替 python2 成为主流还需要几年的时间。如果为了找工作还是学Python 2,学会了Python 2,由Python 2转到python3也不难。

    说了半天,Python2与Python3到底有何区别呢?

    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可以用来玩玩狸猫换太子的大把戏。

    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模块(单独发布,可以从Python "bindings" for Oracle Berkeley DB获取)
    5)移除了new模块
    6)os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下
    7)tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize()

    起源地下载网 » python哪个版本比较稳定

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元