• python 3.x 与2.x的区别


    原文地址https://www.cnblogs.com/kmonkeywyl/p/8279128.html

    保持学习的态度,学一门动态语言其实是很早以前的就准备要做的事情,当时还在纠结python与ruby。现在不单单是要学python,还在考虑用它做点什么,这些等后续再说吧,因为看的是python2.x的书籍。用的是python 3.7.所以先把两者的区别记录一下,仅限于基础。

    python3.x 与2.x的区别

    1.print

    print语句没有了,取而代之的是print()函数。

    py 2.x:

    print "wyl" #语句
    print("wyl") 

    py 3.x:

    >> print("wyl")
    wyl
    >>> print 'wyl'
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print('wyl')?

    2.Unicode

    Python 2 有 ASCII str() 类型,unicode() 是单独的,不是 byte 类型。

    现在, 在 Python 3,我们最终有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。

    由于 Python3.X 源码文件默认使用utf-8编码,这就使得以下代码是合法的:

    py 2.x

    >>> str='王延领那小子真帅'
    >>> str
    'xe6x88x91xe7x88xb1xe5x8cx97xe4xbaxacxe5xa4xa9xe5xaex89xe9x97xa8'

    py 3.x

    >>> str='王延领那小子真帅'
    >>> str
    '王延领那小子真帅'
    >>> 

     3.除法运算 

    Python中的除法有两个运算符,/和//

    首先来说/除法:

    在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C#啊差不多,取整,把小数部分完全忽略掉。

    在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。

    py 2.x

    >>> 1/2
    0
    >>> 

    py 3.x

    >>> 1/2
    0.5
    >>>

    第二种//除法:

    这种除法叫做floor除法,py2.x与py3.x相同

     py2.x py3.x

    >>> 1//2
    0
    >>> 

    4.异常

    在 py3.x 中我们现在使用 as 作为关键词,而非‘,’

    所以异常都从 BaseException继承,并删除了StardardError 

    去除了异常类的序列行为和.message属性 

    用 raise Exception(args)代替 raise Exception, args语法 

    捕获异常的语法改变,引入了as关键字来标识异常实例

    py3.0:

    复制代码
    >>> try:
      1/0
    except Exception , err:
      print err
      
    SyntaxError: invalid syntax
    >>> 
    #正确的写法
    >>> try:
      1/0
    except Exception as err:
      print(err)
    
      
    division by zero
    >>> 
    复制代码

    5.xrange

    xrange() 改名为range(),要想使用range()获得一个list,必须显式调用: 

    py 2.x

    >>> range(1,10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    py3.x

    >>> range(10)
    range(0, 10)
    >>> 

    py3.x 如果想使用range(),可以结合list

    >>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> 

     6.八进制

    python 八进制不能0开头而是以0o开头

    py 3.x

    >>> 0101
    SyntaxError: invalid token
    >>> 0o101
    65
    >>> 

    7.不等运算符

    不等运算py3.x只有“!=”,“<>”已被移除

    py3.x

    >>> 1!=3
    True
    >>> 1<>3
    SyntaxError: invalid syntax
    >>> 

    8.去掉了repr表达式``

    py3.x

    >>> s=`wyl`
    SyntaxError: invalid syntax
    >>> s='wyl'
    >>> repr(s)
    "'wyl'"

    9.多个模块被改名(根据PEP8)

    旧的名字新的名字
    _winreg winreg
    ConfigParser configparser
    copy_reg copyreg
    Queue queue
    SocketServer socketserver
    repr reprlib

    StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。

    Python 2.6已经支援新的io模组。

    httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。

    取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。

    10.数据类型

    py 3.x

    1>去掉了long

    2>新增了bytes类型,对应于2.X版本的八位串

    3>dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。

    11.面向对象

    1>引入抽象基类(Abstraact Base Classes,ABCs)

    2>容器类和迭代器类被ABCs化,所以cellections模块里的类型比Py2.x多了很多

     View Code

    3>迭代器的next()方法改名为__next__(),并增加内置函数next(),用以调用迭代器的__next__()方法 

    4>增加了@abstractmethod和 @abstractproperty两个 decorator,编写抽象方法(属性)更加方便。

    12.模块

    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() 

  • 相关阅读:
    两条线路,如何选
    Eczema
    Eczema
    healing psoriasis -151
    12/30/2019
    how sales area determined for returns vendor?
    [转]SAP LSMW 不能为勾选供应商采购组织视图'Returns Vendor’选项然后维护运达方做录屏...
    通过RFC获取其他SAP系统的数据
    goturkey
    Instant Client 配置
  • 原文地址:https://www.cnblogs.com/111testing/p/8282302.html
Copyright © 2020-2023  润新知