您当前的位置:首页 > 互联网教程

python3和Python2的区别

发布时间:2025-05-12 17:40:41    发布人:远客网络

python3和Python2的区别

一、python3和Python2的区别

在python3把python2中好多原本是函数的变成了类,比如open,input,还有就是2中的输入函数有两个,而3中统一为input,输出在2中是语句,但是3中变成了函数,操作起来更为方便,运算呢,就是把除法和取余额额符号互换了,还有其他很多区别,比如很多类对象没有了,但一般能用到的就是我提到的这些。

程的话最重要的是编程思想,Python3和Python2,它的思想基本是共通的,只是少量的语法差异。而编程中,语法只是细枝末节的东西。无论你学2还是3,都没有区别。会Python的人,一般2和3都会。当你学会了3,只要稍微花上一点时间学习2的语法,那么两门语音你都会了!

1.print函数:print不再是语句,而是函数(Python3中print为一个函数,必须用括号括起来;Python2中print为class)。比如原来是 print'abc'现在是 print('abc')

Python 2的 print声明已经被 print()函数取代了,这意味着我们必须包装我们想打印在小括号中的对象。

2.在Python 3中,没有旧式类,只有新式类,也就是说不用再像这样 class Foobar(object): pass显式地子类化object

但是最好还是加上.主要区别在于 old-style是 classtype类型而 new-style是 type类型

3.新的字符串格式化方法format取代%

错误,从 python2.6+开始已经在str和unicode中有该方法,同时 python3依然支持%算符

同时更改的还有一系列内置函数及方法,都返回迭代器对象,而不是列表或者元组,比如 filter, map, dict.items等

不完全对, python3彻底废弃了 long+int双整数实现的方法,统一为 int,支持高精度整数运算.

7.通过input()解析用户的输入:(Python3中input得到的为str;Python2的input的到的为int型,Python2的raw_input得到的为str类型)统一一下:Python3中用input,Python2中用row_input,都输入为str

幸运的是,在 Python 3中已经解决了把用户的输入存储为一个 str对象的问题。为了避免在 Python 2中的读取非字符串类型的危险行为,我们不得不使用 raw_input()代替。

8.整除:(没有太大影响)(Python3中/表示真除,%表示取余,//表示地板除(结果取整);Python2中/表示根据除数被除数小数点位得到结果,//同样表示地板除)统一一下:Python3中/表示真除,%表示取余,//结果取整;Python2中带上小数点/表示真除,%表示取余,//结果取整

在Python 3中,range()是像 xrange()那样实现以至于一个专门的 xrange()函数都不再存在(在 Python 3中xrange()会抛出命名异常)。

在Python 2中 xrange()创建迭代对象的用法是非常流行的。比如: for循环或者是列表/集合/字典推导式。

这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable是无穷的,意味着你可以无限遍历。

由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange()函数比 range()更快(比如 for循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。

主要是类库的变化,组织结构变了些.但功能没变. urlparse-> urllib.parse这样的变化

最核心的变化它没有说,对 bytes和原生 UNICODE字符串的支持,删除了 unicode对象, str为原生 unicode字符串, bytes替代了之前的 str这个是最核心的

二、python3和python2区别有什么

python2版本和python3版本的区别,两者对比如下

1. Python3对 Unicode字符的原生支持。

Python2中使用 ASCII码作为默认编码方式导致 string有两种类型 str和 unicode,Python3只

支持 unicode的 string。Python2和 Python3字节和字符对应关系为:

2. Python3采用的是绝对路径的方式进行 import

Python2中相对路径的 import会导致标准库导入变得困难(想象一下,同一目录下有 file.py,如

何同时导入这个文件和标准库 file)。Python3中这一点将被修改,如果还需要导入同一目录的文件必

须使用绝对路径,否则只能使用相关导入的方式来进行导入。

3. Python2中存在老式类和新式类的区别,Python3统一采用新式类。新式类声明要求继承 object,

4. Python3使用更加严格的缩进。Python2的缩进机制中,1个 tab和 8个 space是等价的,所

以在缩进中可以同时允许 tab和 space在代码中共存。这种等价机制会导致部分 IDE使用存在问题。

Python3中 1个 tab只能找另外一个 tab替代,因此 tab和 space共存会导致报错:TabError:

inconsistent use of tabs and spaces in indentation.

python学习网,免费的python学习网站,欢迎在线学习!

1. print语句被 Python3废弃,统一使用 print函数

2. exec语句被 python3废弃,统一使用 exec函数

3. execfile语句被 Python3废弃,推荐使用 exec(open("./filename").read())

4.不相等操作符"<>"被 Python3废弃,统一使用"!="

5. long整数类型被 Python3废弃,统一使用 int

6. xrange函数被 Python3废弃,统一使用 range,Python3中 range的机制也进行修改并提高

7. Python3中这些方法再不再返回 list对象:dictionary关联的 keys()、values()、items(),zip(),

map(),filter(),但是可以通过 list强行转换:

2. mydict.keys()#<built-in method keys of dict object at 0x000000000040B4C8>

3. list(mydict.keys())#['a','c','b']

8.迭代器 iterator的 next()函数被 Python3废弃,统一使用 next(iterator)

9. raw_input函数被 Python3废弃,统一使用 input函数

10.字典变量的 has_key函数被 Python废弃,统一使用 in关键词

11. file函数被 Python3废弃,统一使用 open来处理文件,可以通过 io.IOBase检查文件类型

13.异常 StandardError被 Python3废弃,统一使用 Exception

1.浮点数除法操作符“/”和“//”的区别

Python2:若为两个整形数进行运算,结果为整形,但若两个数中有一个为浮点数,则结果为

Python3:为真除法,运算结果不再根据参加运算的数的类型。

Python2:返回小于除法运算结果的最大整数;从类型上讲,与"/"运算符返回类型逻辑一致。

Python3:和 Python2运算结果一样。

1. raise IOError,"file error"#抛出异常

2. except NameError, err:#捕捉异常

1. raise IOError("file error")#抛出异常

2. except NameError as err:#捕捉异常

Python2,for循环会修改外部相同名称变量的值

2. print('comprehension:', [i for i in range(5)])

3. print('after: i=', i)#i=4

Python3,for循环不会修改外部相同名称变量的值

2. print('comprehension:', [i for i in range(5)])

3. print('after: i=', i)#i=1

Python2,round函数返回 float类型值

1. isinstance(round(15.5),int)#True

Python3,round函数返回 int类型值

1. isinstance(round(15.5),float)#True

Python2中任意两个对象都可以比较

Python3中只有同一数据类型的对象可以比较

1. 11<'test'# TypeError: unorderable types: int()< str()

三、Python 2 和 Python 3 有哪些主要区别

你应该是刚接触Python吧,建议直接学Python3.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 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。

Python 3.0的变化主要在以下几个方面:

print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:

print("fish")#注意print后面有个空格

print("fish")#print()不能带有任何其它参数

然而,Python 2.6实际已经支持新的print()语法:

然而,Python 2.6实际已经支持新的print()语法:

from__future__importprint_function

print("fish","panda",sep=',')

2.Unicode(这是一个极其好的改进)

2.Unicode(这是一个极其好的改进)

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

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

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

>>>中国='china'

>>>str="我爱北京天安门"

'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'

>>>str=u"我爱北京天安门"

u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

Python 3.x

'我爱北京'

3.除法运算

Python中的除法较其它语言显得非常高端,有套很复杂的规则。Python中的除法有两个运算符,/和//

在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完全忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。

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

0.5

注意的是并不是舍弃小数部分,而是执行floor操作,如果要截取小数部分,那么需要使用math模块的trunc函数

注意的是并不是舍弃小数部分,而是执行floor操作,如果要截取小数部分,那么需要使用math模块的trunc函数

在 Python 3中处理异常也轻微的改变了,在 Python 3中我们现在使用 as作为关键词。

捕获异常的语法由except exc, var改为except exc as var。

使用语法except(exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支持这两种语法。

1.在2.x时代,所有类型的对象都是可以被直接抛出的,在3.x时代,只有继承自BaseException的对象才可以被抛出。

2. 2.x raise语句使用逗号将抛出对象类型和参数分开,3.x取消了这种奇葩的写法,直接调用构造函数抛出对象即可。

在2.x时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在3.x中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。

在 Python 2中 xrange()创建迭代对象的用法是非常流行的。比如: for循环或者是列表/集合/字典推导式。

这个表现十分像生成器(比如。"惰性求值")。但是这个 xrange-iterable是无穷的,意味着你可以无限遍历。

由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange()函数比 range()更快(比如 for循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。

在 Python 3中,range()是像 xrange()那样实现以至于一个专门的 xrange()函数都不再存在(在 Python 3中 xrange()会抛出命名异常)。

print'Python',python_version()

print'\ntimingrange()'

print'\n\ntimingxrange()'

1000loops,bestof3:433µsperloop

1000loops,bestof3:350µsperloop

Python 3

print('Python',python_version())

print('\ntimingrange()')

1000loops,bestof3:520µsperloop

print(xrange(10))

---------------------------------------------------------------------------

NameErrorTraceback(mostrecentcalllast)

<ipython-input-5-5d8f9b79ea70>in<module>()

NameError:name'xrange'isnotdefined

6.八进制字面量表示

八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。

新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支持这两种语法。

在Python 3.x中,表示八进制字面量的方式只有一种,就是0o1000。

Python 2.x中不等于有两种写法!=和<>

Python 3.x中去掉了<>,只有!=一种写法,还好,我从来没有使用<>的习惯

Python 2.x中反引号``相当于repr函数的作用

Python 3.x中去掉了``这种写法,只允许使用repr函数,这样做的目的是为了使代码看上去更清晰么?不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。

defsendMail(from_:str,to:str,title:str,body:str)->bool:

pass

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

StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经支援新的io模组。

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

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

1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long

2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:

>>>b=b'china'

<type'bytes'>

str对象和bytes对象可以使用.encode()(str-> bytes) or.decode()(bytes-> str)方法相互转化。

str对象和bytes对象可以使用.encode()(str-> bytes) or.decode()(bytes-> str)方法相互转化。

b'china'

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

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