🍉前言
🍉Python 的 3.0 版本,。相对于 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 函数和exec函数
print 语句没有了,取而代之的是 print() 函数。
这点不明显,代码格式化工具会帮我们进行代码格式化,因此我们可能观察不大是不是有个空格(其实没有)
而没有括号还挺明显
# py2
# print "fish" #直接报错
print("fish") # 注意print后面有个空格
print("fish") # print()不能带有任何其它参数
# py3
print([1, 2, 3])
取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。与上类似,exec()函数用于执行字符串python代码
2.Unicode
py2 | py3 |
---|---|
有 ASCII str() 类型,unicode() 是单独的 | 有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。 |
不支持 | Python3.x 源码文件默认使用 utf-8 编码 |
# 由于 Python3.x 源码文件默认使用 utf-8 编码,所以使用中文就更加方便了
# 使用中文变量名
中国 = 'china'
print(中国)
3.除法运算与不等运算符
除法
Python 中的除法较其它语言显得非常高端,有套很复杂的规则。Python 中的除法有两个运算符,/ 和 //
py2 | py3 |
---|---|
与 Java 和 C ,整数相除是一个整数,把小数部分忽略掉,浮点数除法得到一个浮点数 | / 对于整数之间的相除,结果也会是浮点数。 |
# 除法有两种,相比于其他语言就显得高级
# 除法运算
# py2
print(1/2) # 0 整数相除还是整数,即使是小数也会取整数部分
print(1.0/2.0) # 0.5
#对于//
print(-1//2) # -1 得-1
#py3
print(1/2) # 0.5 就不是整数了 而是浮点数
print(-1//2) # -1
# 并不是舍弃小数部分,而是执行 floor 操作,
# 如果要截取整数部分,那么需要使用 math 模块的 trunc 函数
不等运算符
py2 | py3 |
---|---|
两种写法 != 和 <> | 去掉了<>, 只有!=一种写法, |
去除了repr表达式··
py2 | py3 |
---|---|
反引号``相当于repr函数的作用 | 去掉了``这种写法,只允许使用repr函数 |
应用场景 | 不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。 |
4.异常
py2 | py3 |
---|---|
捕获异常的语法由 except exc, var | except exc as var。新增as作为关键字 |
在 2.x 时代,所有类型的对象都是可以被直接抛出的 | 在 3.x 时代,只有继承自BaseException的对象才可以被抛出 |
2.x raise 语句使用逗号将抛出对象类型和参数分开 | 3.x 取消了这种奇葩的写法,直接调用构造函数抛出对象即可。 |
在 2.x 时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情 | 在 3.x 中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。 |
5.xrange
在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。这个表现十分像生成器(比如。“惰性求值”)
问题:但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。
由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。
py3 :range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名异常)。
6.八进制字面量表示
八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。
新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支持这两种语法。
在Python 3.x中,表示八进制字面量的方式只有一种,就是0o1000。
7.多个模块被更改删除更名(根据PEP8)
更名
py2旧的名字 | py3新的名字 |
---|---|
_winreg | winreg |
ConfigParser | configparser |
copy_reg | copyreg |
Queue | queue |
SocketServer | socketserver |
repr | reprlib |
合并
StringIO模块现在被合并到新的io模组内。httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
删除
new, md5, gopherlib等模块被删除
加粗样式文章来源:https://www.toymoban.com/news/detail-432485.html
8.数据类型
py2 | py3 |
---|---|
有long类型 | Py3.X去除了long类型,现在只有一种整型——int |
八位串 | 新增了bytes类型,对应于2.X版本的八位串 |
而之前的iterkeys()等函数都被废弃。 | dict的.keys()、.items 和.values()方法返回迭代器 |
同时去掉的还有 dict.has_key() | 用 in替代它 |
在python2.x中raw_input()和input( ),两个函数都存在, raw_input()—将所有输入作为字符串看待,返回字符串类型input()-----只能接收"数字"的输入,在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型(int, float ) | 在python3.x中raw_input()和input( )进行了整合,去除了raw_input(),仅保留了input()函数,其接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型。 |
9.打开文件与input输出
py2 | py3 |
---|---|
file( … )或 open(…) | open(…) |
raw_input( “提示信息” ) | input( “提示信息” ) |
10.map、filter 和 reduce
py2 | py3 |
---|---|
map 和 filter,看到它们两者的类型是 built-in function(内置函数) | 从函数变成了类,其次,它们的返回结果也从当初的列表成了一个可迭代的对象, 我们尝试用 next 函数来进行手工迭代 |
对于比较高端的 reduce 函数,属于 built-in 了 | 挪到 functools 模块当中 |
🍉 学无止境,都看到这了,点个赞关注支持一下呗!嘿嘿(* ̄︶ ̄)文章来源地址https://www.toymoban.com/news/detail-432485.html
到了这里,关于【Python2.x与Python3.x的区别】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!