python3.x和python2.x区别,Python 3.x和Python 2.x唯一的区别就是
Python2.x与3.x版本区别
Python的3.0版本,常被称为Python 3000,简称Py3k。与早期版本的Python相比,这是一个很大的升级。
为了不带来太大的负担,Python 3.0在设计时没有考虑向后兼容性。
很多为早期Python版本设计的程序在Python 3.0上无法正常运行。
为了照顾现有程序,Python 2.6作为过渡版本,基本上使用Python 2.x的语法和库,同时考虑迁移到Python 3.0,允许使用一些Python 3.0的语法和函数。
新的Python程序建议使用Python 3.0版语法。
除非执行环境无法安装Python 3.0或者程序本身使用了不支持Python 3.0的第三方库。目前不支持Python 3.0的第三方库有Twisted、py2exe、PIL等。
大多数第三方库都试图与Python版兼容。即使不能马上用Python 3.0,也建议先写一个兼容Python 3.0的程序,然后用Python 2.6,Python 2.7来执行。
Python 3.0的变化主要在以下几个方面:
print 函数
print语句不见了,取而代之的是print()函数。Python 2.6和Python 2.7部分支持这种形式的打印语法。在Python 2.6和Python 2.7中,以下三种形式是等效的:
打印“鱼”
Print(fish)#注意,Print后面有一个空格
Print(fish)#print()不能带任何其他参数。然而,Python 2.6实际上支持新的print()语法:
来自__future__importprint_function
打印(鱼,熊猫,sep=,)Unicode
Python有ASCII str()类型,unicode()是单独的,不是字节类型。
现在,在Python 3中,我们终于有了Unicode (utf-8)字符串和一个字节类:byte和bytearrays。
从Python3开始。默认情况下,x源文件以utf-8编码,这使得以下代码合法:
中国=中国
印刷品(中国)
中国Python 2.x
我爱天安门广场
潜艇用热中子反应堆(submarine thermal reactor的缩写)
xe6 \ x88 \ x91 \ xe7 \ x88 \ xb1 \ xe5 \ x8c \ x97 \ xe4 \ xba \ xac \ xe5 \ xa4 \ xa9 \ xe5 \ xae \ x89 \ xe9 \ x97 \ xa8
我爱北京的天安门广场
潜艇用热中子反应堆(submarine thermal reactor的缩写)
u \ u 6211 \ u 7231 \ u 5317 \ u 4 EAC \ u 5929 \ u5b 89 \ u95e 8 Python 3 . x
我爱天安门广场
潜艇用热中子反应堆(submarine thermal reactor的缩写)
我爱除法运算天安门广场
与其他语言相比,Python中的除法非常高级,有一套复杂的规则。Python中的除法有两个运算符,/和//
首先分:
在python 2.x中,/division类似于我们所熟悉的Java、c等大多数语言,整数除法的结果是一个整数,小数部分完全忽略,而浮点除法保留小数部分。
得到一个浮点数的结果。
相关推荐:《Python教程》
在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。
Python 2.x:
>>>1/2Python 3.x:0
>>>1.0/2.0
0.5
>>>1/2而对于//除法,这种除法叫做floor除法,会对除法的结果自动进行一个floor操作,在python 2.x和python 3.x中是一致的。0.5
python 2.x:
>>>-1//2python 3.x:-1
>>>-1//2注意的是并不是舍弃小数部分,而是执行 floor 操作,如果要截取整数部分,那么需要使用 math 模块的 trunc 函数-1
python 3.x:
>>>importmath异常>>>math.trunc(1/2)
0
>>>math.trunc(-1/2)
0
在 Python 3 中处理异常也轻微的改变了,在 Python 3 中我们现在使用 as 作为关键词。
捕获异常的语法由 except exc, var 改为 except exc as var。
使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支持这两种语法。
·在2.x时代,所有类型的对象都是可以被直接抛出的,在3.x时代,只有继承自BaseException的对象才可以被抛出。
·2.x raise语句使用逗号将抛出对象类型和参数分开,3.x取消了这种奇葩的写法,直接调用构造函数抛出对象即可。
在2.x时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在3.x中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。
xrange
在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。
这个表现十分像生成器(比如。"惰性求值")。但是这个 xrange-iterable 是无穷的,意味着你可以遍历。
由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。
在Python 3中,range()是像 xrange()那样实现以至于一个专门的xrange()函数都不再存在(在Python 3中xrange()会抛出命名异常)。
importtimeitPython 2n=10000
deftest_range(n):
returnforiinrange(n):
pass
deftest_xrange(n):
foriinxrange(n):
pass
print'Python',python_version()Python 3print'\ntimingrange()'
%timeittest_range(n)
print'\n\ntimingxrange()'
%timeittest_xrange(n)
Python2.7.6
timingrange()
1000loops,bestof3:433µsperloop
timingxrange()
1000loops,bestof3:350µsperloop
print('Python',python_version())print('\ntimingrange()')
%timeittest_range(n)
Python3.4.1
timingrange()
1000loops,bestof3:520µsperloop
print(xrange(10))八进制字面量表示---------------------------------------------------------------------------
NameErrorTraceback(mostrecentcalllast)
<ipython-input-5-5d8f9b79ea70>in<module>()
---->1print(xrange(10))
NameError:name'xrange'isnotdefined
八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。
新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支持这两种语法。
在Python 3.x中,表示八进制字面量的方式只有一种,就是0o1000。
python 2.x
>>>0o1000python 3.x512
>>>01000
512
>>>01000不等运算符File"<stdin>",line1
01000
^
SyntaxError:invalidtoken
>>>0o1000
512
Python 2.x中不等于有两种写法 != 和 <>
Python 3.x中去掉了<>, 只有!=一种写法,还好,我从来没有使用<>的习惯
去掉了repr表达式``
Python 2.x 中反引号``相当于repr函数的作用
Python 3.x 中去掉了``这种写法,只允许使用repr函数,这样做的目的是为了使代码看上去更清晰么?不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。
defsendMail(from_:str,to:str,title:str,body:str)->bool:多个模块被改名(根据PEP8)pass
StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经支援新的io模组。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。
5.数据类型
1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long
2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:
>>>b=b'china'str 对象和 bytes 对象可以使用 .encode() (str -> bytes) 或 .decode() (bytes -> str)方法相互转化。>>>type(b)
<type'bytes'>
>>>s=b.decode()3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。>>>s
'china'
>>>b1=s.encode()
>>>b1
b'china'
打开文件
原:
file(.....)改为只能用或
open(.....)
open(.....)从键盘录入一个字符串
原:
raw_input("提示信息")改为:
input("提示信息")在python2.x中raw_input()和input( ),两个函数都存在,其中区别为:
·raw_input()---将所有输入作为字符串看待,返回字符串类型
·input()-----只能接收"数字"的输入,在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型(int, float )
在python3.x中raw_input()和input( )进行了整合,去除了raw_input(),仅保留了input()函数,其接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型。
map、filter 和 reduce
这三个函数号称是函数式编程的代表。在 Python3.x 和 Python2.x 中也有了很大的差异。
首先我们先简单的在 Python2.x 的交互下输入 map 和 filter,看到它们两者的类型是 built-in function(内置函数):
>>>map它们输出的结果类型都是列表:<built-infunctionmap>
>>>filter
<built-infunctionfilter>
>>>
>>>map(lambdax:x*2,[1,2,3])但是在Python 3.x中它们却不是这个样子了:[2,4,6]
>>>filter(lambdax:x%2==0,range(10))
[0,2,4,6,8]
>>>
>>>map首先它们从函数变成了类,其次,它们的返回结果也从当初的列表成了一个可迭代的对象, 我们尝试用 next 函数来进行手工迭代:<class'map'>
>>>map(print,[1,2,3])
<mapobjectat0x10d8bd400>
>>>filter
<class'filter'>
>>>filter(lambdax:x%2==0,range(10))
<filterobjectat0x10d8bd3c8>
>>>
>>>f=filter(lambdax:x%2==0,range(10))对于比较高端的 reduce 函数,它在 Python 3.x 中已经不属于 built-in 了,被挪到 functools 模块当中。>>>next(f)
0
>>>next(f)
2
>>>next(f)
4
>>>next(f)
6
>>>
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。