python 2 3 区别3.x和python 2 3 区别2.x的区别

下次自动登录
现在的位置:
python 2.x和3.x中input()函数的区别
python2.x的input(prompt)相当于eval(raw_input(prompt)). 而python3.x的input(prompt)则基本等价于raw_input(prompt),返回的是一个字符串,使用的时候需要强制转换为目的数据类型。
python 2.x
x = input(&x: &)
y = input(&y: &)
print x * y
python 3.x
x = input(&x: &)
y = input(&y: &)
print(float(x) * float(y))
【上篇】【下篇】
百度站内搜索
Perl教程,Perl模块,Perl应用,perl实践,perl
C/C++教程,C/C++应用,算法,数据结构
sql语言,mysql教程,oracle教程,postgreSQL教程,数据库基础,数据库应用
Python教程,Python学习,python模块,Python应用,python
perl使用操作符排序中戏2016级新生新生开学报到,软萌妹子主打清纯牌。
连续在14年间强奸、杀害多名女性的犯罪嫌疑人落网。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  Python部落()组织翻译,禁止转载,欢迎转发。
  许多Python初学者想知道从哪个Python版本开始学习。我对这个问题的答案是:以你最喜欢的教程使用的Python版本开始,到后面再学习它们间的差异。
  但是如果你要启动一个新项目并要做一个选择。我会说目前在使用Python2.7或Python3.x没有对与错,只要它们支持你计划使用到的库。然而,看一看这两个最流行版本间的主要区别是值得的,当你在使用它们编码时可以避免常见的陷阱或你正打算移植你的项目。
  __future__模块
  Python3.x引入了一些Python2不兼容的关键字和特性,在Python2中可以通过内建的__future__模块导入。如果你计划对你的代码提供Python3.x支持,推荐使用__future__模块。举例,如果我们想要在Python2中有Python3.x的整数除法,我们可以通过如下导入:
  __future__模块的更多功能在下表中列出:
  nested_scopes
  2.1.0b1 2.2 PEP 227:静态嵌套的范围
  generators 2.2.0a1 2.3 PEP 255:简单生成器
  division 2.2.0a2 3.0 PEP 238:修改除法运算符
  absolute_import 2.5.0a1 3.0 PEP 328:导入:多行和绝对/相对
  with_statement 2.5.0a1 2.6 PEP 343:“with” 语句
  print_function 2.6.0a2 3.0 PEP 3105:打印函数
  unicode_literals 2.6.0a2 3.0 PEP 3112:Python 3000字节文本
  (源:[https://docs.python.org/2/library/__future__.html](https://docs.python.org/2/library/__future__.html#module-__future__))
  print函数
  铝说悖print语法的变化可能是最广为人知的更改,但仍值得一提:print语句被print函数取代,表示我们必须用圆括号将想打印的对象引起来。
  Python2不需要圆括号,相比之下,Python3以Python2没有圆括号的方式调用print函数会抛出SyntaxError异常。
  注意:
  上面Python2打印&Hello, World&的例子看起来很“正常”。但是,如果括号中有多个对象,我们会创建一个元组,因为Python2中的print是语句,不是函数调用。
  整数除法
  如果你正在移植代码或在Python2上执行Python3的代码,这种变化特别危险,因为整数除法行为的变化常常不能引起人们的注意(它不抛出SyntaxError异常)。
  所以,在我的Python3脚本中,我仍然倾向于使用float(3)/2或3/2.0而不是3/2,这样可以为Python2的小伙伴们省去一些麻烦(反之亦然,我建议在Python2的脚本中使用from __future__ import division)。
  Unicode
  Python2有ASCII str()字符串类型,独立的unicode类型,但是没有byte字节类型。
  现在,Python3中,我们终于有Unicode(utf-8)字符串和2字节类Ubyte和bytearrays。
  xrange
  xrange()的用法在Python2.x中非常流行,用于创建一个迭代对象,例如,在一个for循环或列表/字典解析。
  这个行为非常类似于生成器(即“惰性计算”),但在这里的xrange-iterable是不可穷举的――意味着,你可以无限地迭代下去。
  由于“惰性计算”,如果你只遍历一次的话(例如,在一个for循环中)xrange()通常是更快的。然而,相比于1次迭代,不建议重复迭代多次,因为每一次迭代都会从头开始。
  在Python3中,range()实现了类似xrange()的功能,因此专门的xrange()函数不存在了(在Python3中使用xrange()会抛出一个NameError异常。)
  Python3中range 对象的__contains__方法
  另一个值得一提的是:Python3.x中,range有一个新的__contains__方法(多谢Yuchen Ying指出来)。__contains__方法可以显著地加快Python3.x对整型和布尔类型的查找。
  根据上面的timeit变量结果可以看出,整数类型的查找比浮点数类型的查找快60,000倍。然而,在Python2.x中range和xrange没有__contains__方法,对整型和浮点类型的查找差异不会太大。
  下面__contain__方法的“证明”目前还没有加入到Python2.x中。
  关于Python2和Python3速度差异的说明
  一些人指出了Python3 range()和Python2 xrange()的速度差异。因为它们实现了相同的方式,就会有相同的速度。然而,有这样一个事实:Python3通常慢于Python2。
  引发异常
  Python2接受“新”、“旧”两种语法格式,而Python3会堵塞(会引发SyntaxError异常),如果我们不将异常参数括在括号里:
  在Python3中引发异常的正确方式:
  处理异常
  此外在Python3中对异常的处理略有改变。在Python3中,现在我们必须使用&as&关键字。
  next()函数和.next()方法
  next()(.next())是一种常用的函数(方法),这是另一种语法更改(或者说在执行时更改)值得一提:在Python2.7.5中你可以使用next()函数和.next()方法,在Python3只保留了next()函数(调用.next()方法会引发AttributeError异常)。
  For循环变量和全局命名空间泄漏
  好消息是:在Python3.x for循环中的变量不会影响全局命名空间了!
  这里回头看下Python3.x中的更改和新特性描述,如下所述:
  “列表解析不再支持的语法 [... for var in item1, item2, ...]。使用[... for var in (item1, item2, ...)]语法代替。此外请注意,列表解析有不同的语义:他们更接近于list()构造函数内部生成器表达式的语法糖,特别是循环控制的变量不再影响周围范围。”
  比较unorderable类型
  在Python3中另一个不错的改变是:如果我们尝试比较unorderable类型,会引发TypeError异常。
  通过input()解析用户输入
  幸运的是,input()函数在Python3中被修复了,因此它将用户的输入存储成字符串对象。为了避免在Python2中读取非字符串类型的输入,我们必须使用raw_input()函数。
  返回可迭代对象而非列表
  正如我们已经在xrange章节看到的,在Python3中,一些函数和方法返回可迭代对象,而不是Python2中的列表。
  因为我们通常只遍历一次,我认为这种变化非常合理的节省内存。然而,相比于生成器,如果需要的话遍历多次也是可能的,那么这种情况下就不那么有效了。
  对于那些确定需要列表对象的情况,我们可以通过list()函数简单地将可迭代对象转换成列表。
  一些更常用的函数和方法在Python3中不再返回列表了:
  filter()
  字典的.keys()方法
  字典的.values()方法
  字典的.items()方法
  关于Python2和Python3更多文章
  这里是一些我推荐的关于Python2和Python3的好文章供后续学习。
  // 移植到Python3
  Should I use Python 2 or Python 3 for my development activity?
  What’s New In Python 3.0
  Porting to Python 3
  Porting Python 2 Code to Python 3
  How keep Python 3 moving forward
  // 支持和反对Python3
  10 awesome features of Python that you can’t use because you refuse to upgrade to Python 3
  Everything you did not want to know about Unicode in Python 3
  Python 3 is killing Python
  Python 3 can revive Python
  Python 3 is fine
  英文原文:/Articles/2014_python_2_3_key_diff.html
  译者:leisants
  了解野狗,请点击阅读原文。
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
聚集优质的Python内容, 提供专业的学习意见, 辅以有...
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下3.x和2.x的区别。特此在自己的空间中记录一下,以备以后查找方便,也可以分享给想学习Python的friends.
Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可
以取得很好的优化结果。
Py3.1性能比Py2.5慢15%,还有很大的提升空间。
Py3.X源码文件默认使用utf-8编码,这就使得以下代码是合法的:
    &&& 中国 = 'china'
    &&&print(中国)
    china
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)
    '0b'
    &&& _438 = '0b'
    &&& _438
    '0b'
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,编写抽象方法(属性)更加方便。
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模块(单独发布,可以从获取)
5)移除了new模块
6)os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下
7)tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize()
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
阅读(...) 评论()总结Python2(Python&2.x版本)和Python3(Python&3.x版本)之间的区别
&转载自:&&
首先要说的是,Python的版本,目前主要分为两大类:
Python 2.x的版本的,被称为Python2:是目前用的最广泛的,比如Python 2.7.3。
Python 3.x的版本的,被称为Python3:是最新的版本的,比如Python 3.1。长远来看,也算是以后的趋势。
【Python2和Python3之间的区别】
1.从Python2到Python3,很多基本的函数接口变了,甚至是,有些库或函数被去掉了,改名了
Python2和Python3,在很多基本的,最常用的函数方面,接口都变了。
最典型的就要数大家最常用的print函数了:
2.第三方库的支持方面,目前来说,还是Python2支持的最好,Python3支持的不太够
Python强大的原因之一是第三方的库很多,功能很强大。
而目前很多Python的第三方的库,很多只提供Python2的。
或者是即使提供了Python3的,但是也不一定很成熟。
比如之前折腾过的,Python2中,很是方便。
结果后来由于特殊需要,使用Python3,再想去利用xlwt,就没法直接用了,然后又找到xlwt专门针对python3的版本:,然后结果使用过程中,又出错:
所以,对于很多第三方库,还是python2支持的比较好。
【结论:如何选择Python的版本】
针对初学者:
暂时还是建议,先去学习Python2吧。
毕竟目前太多的Python程序,示例代码,第三方库,都还是针对Python 2.x的较多,比较好,比较稳定。
等你对Python熟悉了,然后再转为Python 3.x,也不迟。
针对开发者:
如果是新项目,写代码的话,能用Python 3.x,还是用Python 3.x 吧。
以避免以后再去折腾Python 2.x转Python 3.x。
其中,如果现在以后Python2的代码了,想要将Python 2.x的代码,转换为Python 3.x,可以参考:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。热门文章最新文章

我要回帖

更多关于 python 2和3的区别 的文章

 

随机推荐