首页

文章

python3和Python2的区别

发布网友 发布时间:2022-03-03 12:39

我来回答

3个回答

热心网友 时间:2022-03-03 14:09

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

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

1.print 函数

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

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

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

from __future__ import print_function
print("fish", "panda", sep=', ')

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

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

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

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

>>> 中国 = 'china' 
>>>print(中国) 
china

Python 2.x

>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

Python 3.x

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

3.除法运算

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

首先来说/除法:

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

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

Python 2.x:

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

Python 3.x:

>>> 1/2
0.5

而对于//除法,这种除法叫做floor除法,会对除法的结果自动进行一个floor操作,在python 2.x和python 3.x中是一致的。

python 2.x

>>> -1 // 2
-1

python 3.x:

>>> -1 // 2
-1

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

python 3.x:

>>> import math
>>> math.trunc(1 / 2)
0
>>> math.trunc(-1 / 2)
0

4.异常

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

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

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

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

5.xrange

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

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

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

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

import timeit
n = 10000
def test_range(n):
    return for i in range(n):
        pass
def test_xrange(n):
    for i in xrange(n):
        pass

Python 2

print 'Python', python_version()
print '\ntiming range()' 
%timeit test_range(n)
print '\n\ntiming xrange()' 
%timeit test_xrange(n)
Python 2.7.6
timing range()
1000 loops, best of 3: 433 µs per loop
timing xrange()
1000 loops, best of 3: 350 µs per loop

Python 3

print('Python', python_version())
print('\ntiming range()')
%timeit test_range(n)
Python 3.4.1
timing range()
1000 loops, best of 3: 520 µs per loop

print(xrange(10))
---------------------------------------------------------------------------
NameError                       Traceback (most recent call last)
<ipython-input-5-5d8f9b79ea70> in <mole>()
----> 1 print(xrange(10))
NameError: name 'xrange' is not defined

6.八进制字面量表示

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

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

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

python 2.x

>>> 0o1000
512
>>> 01000
512

python 3.x

>>> 01000
  File "<stdin>", line 1
    01000
        ^
SyntaxError: invalid token
>>> 0o1000
512

7.不等运算符

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

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

8.去掉了repr表达式``

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

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

def sendMail(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()函数。

10.数据类型

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替代它吧 。

热心网友 时间:2022-03-03 15:27

以下是他们之间的区别:
1、python2默认是使用ASCII编码,所以说他们的编码默认是不支持中文的。
python3默认是使用UTF-8的编码,所以他们默认是支持中文的。
2、python2是不支持中文编码的,而且python2 的变量命名只能用英文。
python3是支持中文的,而且python3的变量命名是能够使用中文的。

热心网友 时间:2022-03-03 17:01

以下来自【Python开发者门户】可参考下:如果你是一个初学者,或者你以前接触过其他的编程语言,你可能不知道,在开始学习python的时候都会遇到一个比较让人很头疼的问题:版本问题!!是学习python2
还是学习
python3
?这是非常让人纠结的!
搜索一下便会发现python3

python2
是不兼容的,而且差异比较大,到底学习哪个版本呢?下面就来为大家分析一下:
其实python是linux上最常用的软件之一,但是linux目前的版本大部分还是使用python2的,而且,在linux上依赖python2的程序更多一些,所以
Python3
要代替
python2
成为主流还需要几年的时间。
当初设计
Python3
的目的是没有代码兼容的包袱的情况下改进
Python,但个人认为改进得还不够大刀阔斧,没有彻底改进一些bug,还有不少的
wart
错过了改进机会,因此造成的语法不兼容的地方也没最初设想的多。
人们几年摸索慢慢下来,大部分的情况下可以直接写
2/3
兼容的代码,也有
six
这类的兼容层可用。
所以先学
Python2
还是
Python3
都不是问题,或者说都是问题。
目前现状是实际应用中大部分暂不考虑
Python3,有的时候注意写兼容
2/3
的代码。用
Python2
为主的写新代码时要考虑以后迁移到
Python3
的可能性。
无论学
Python2
还是
Python3,都需要注意另外一边的不同点:所幸就是这些不同点很容易掌握,只有一个
unicode
encoding
对较多人造成困扰(同时也是很多
web
相关库移植的主要障碍,3.3
重新支持
u'',情况大大改善了)
学习python2
还是
python3
、使用python2
还是
python3
需要看具体情况而定
所以我建议:
1.
如果是你在企业中,需要用到python而学习python的话,那就要看企业的应用python的版本进行学习;
2.
如果想要更多的成熟解决方案,最少的bug,最稳定的应用那就用python2

3.
如果你是在读大学的学生,那我建议你学习python3,等到毕业的时候或许python已经成为了主流。
仅代表个人的观点哦
如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 软柿子的热量 孕妇可以吃软柿子吗不是西红柿 脆柿子和软柿子的区别 脆柿子好还是软柿子好 软柿子可以多吃吗 “鱼悬洁白振清风”的出处是哪里 用大自然的声音评课好吗? 妇产科博士找超声科工作容易吗 怎能把微信6.2.0版本换回6.1.2版 微信群6.2.4怎么增加人数上限 微信6.2.2如何备份手机通讯录 电脑桌面图标不能放大? 有什么好用的识图软件 识图认人哪个软件最好 手机识图软件什么软件能识别图片位置 小米手机自动锁屏时间怎么修改 小米手机屏幕锁定时间设置教程 能举起100斤算大力吗 中医美容专业是什么 中医美容证有什么用 单声道音频什么意思(开启单声道音频有什么好处) 单声道音频是什么,有什么用处? 户口还未迁移到婆家 娘家户口怎么就没了呢 我结婚没有迁户口,现在娘家也没有怎么办 没领证生的孩子一般会判给谁 没领证生的孩子会判给谁 信用卡卡种有哪些 找一首古风歌曲 男声 低配电脑装w10还是w7流畅 电脑配置低装win7还是win10好 低配电脑适合装WIN7系统还是WIN10系统? ...500s-15isk这个联想笔记本的内存条尺寸是什么型号的有没有知道的... 越快越好.怎样减肥.而且胸部不缩水 请问徐闻县海安长途汽车客运站客服是多少? 过了平台期还会瘦吗 悦耳的意思悦耳的解释 重庆师范大学应用心理学专业的权威性如何? 打印机laserjetm1136mfp怎样设置无线打印 经典电影赏析之1:《精武英雄》 爆米花用的什么玉米 糯玉米哪个好 有机糯玉米的营养价值如何? 四大直辖市换帅原因 四大直辖市换帅为啥 驱蚊小妙招 伯乐在线 python2和3的区别 python3.4怎么安装ipython 您好,我用ipython -v和python -m IPython命令,遇到ImportError,请问该怎么办?需要特别在意么? pycharm ipython 哪个 风油精加白醋可以驱蚊子吗二丫小妙招 windows安装python和ipython可以共存吗 去蚊子的小妙招 ipython notebook 和Python有什么区别 安装ipython必须要安装python吗 python版本为2.7,安装哪个ipython 系统中同时有 python2和 python3,怎么让 ipython 选择不同的版本... 同一个汉字在python shell和ipython下编码为什么不同 pythonxy中ipythonqt与i pythonshell有什么区别 python有哪些种类 ipython numpython cpython 知乎 iphone QQ邮箱退出后还能收到QQ邮件,何解? jupyter 和 ipython的区别 怎么取消iphone5上的qq邮箱地址 ipython好还是python好 我的iphone装了qq邮箱 进去就退出 怎么回事啊 驱赶蚊子的小妙招 如何将ipython添加入spyder的python console中? 驱蚊小窍门 Ipython已经分裂出Jupyter了,再用ipython还好用吗 驱蚊 山里的蚊子都不怕风油精的怎么办? 如何将python文件导入ipython 最有效的去除蚊子的方法 如何查看python的当前版本号 如何查看自己的python版本 蚊子用什么办法消灭最好:消灭室内蚊子的小妙招 如何查看python版本 有哪些生活小妙招可以把蚊子驱除 家里驱蚊的2个小妙招,放在角落里,只需几天蚊 如何知道当前使用的python是哪个版本? 如何查看python版本是多少位的 如何查看linux的python版本 如何查看python的版本 怎么查看python中已安装的包 如何查看python 的requests版本 怎么激活QQ邮箱啊?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com