当前位置: 首页 > article >正文

【Python2.x与Python3.x的区别】

🍉前言

	🍉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

py2py3
有 ASCII str() 类型,unicode() 是单独的有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。
不支持Python3.x 源码文件默认使用 utf-8 编码
# 由于 Python3.x 源码文件默认使用 utf-8 编码,所以使用中文就更加方便了
# 使用中文变量名
中国 = 'china'
print(中国)

3.除法运算与不等运算符

除法

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

py2py3
与 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 函数

不等运算符

py2py3
两种写法 != 和 <>去掉了<>, 只有!=一种写法,

去除了repr表达式··

py2py3
反引号``相当于repr函数的作用去掉了``这种写法,只允许使用repr函数
应用场景不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。

4.异常

py2py3
捕获异常的语法由 except exc, varexcept 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新的名字
_winregwinreg
ConfigParserconfigparser
copy_regcopyreg
Queuequeue
SocketServersocketserver
reprreprlib

合并
StringIO模块现在被合并到新的io模组内。httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。

删除
new, md5, gopherlib等模块被删除

加粗样式

8.数据类型

py2py3
有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输出

py2py3
file( … )或 open(…)open(…)
raw_input( “提示信息” )input( “提示信息” )

10.map、filter 和 reduce

py2py3
map 和 filter,看到它们两者的类型是 built-in function(内置函数)从函数变成了类,其次,它们的返回结果也从当初的列表成了一个可迭代的对象, 我们尝试用 next 函数来进行手工迭代
对于比较高端的 reduce 函数,属于 built-in 了挪到 functools 模块当中

🍉 学无止境,都看到这了,点个赞关注支持一下呗!嘿嘿(* ̄︶ ̄)


http://www.kler.cn/news/16399.html

相关文章:

  • 进程相关(创建-回收-exec-守护进程)
  • 【华为OD机试 2023最新 】任务总执行时长(C语言题解 100%)
  • BPMN2.0 任务-服务任务
  • LVS负载均衡集群--DR模式
  • Chapter1:控制系统数学模型(下)
  • LC-1033. 移动石子直到连续(分类讨论)
  • Ubuntu搜狗输入法安装指南
  • Redis入门指南:深入了解这款高性能缓存数据库
  • MySQL示例数据库(MySQL Sample Databases) 之 Employees 数据库
  • [AION]我眼中的《永恒之塔私服》
  • 【拓扑排序】课程表系列
  • 基于SpringBoot的冬奥会科普平台
  • Python进阶项目--只因博客(bootstrap+flask+mysql)
  • Threejs进阶之十二:Threejs与Tween.js结合创建动画
  • 【001-Java基础练习】-适合初学者的练习
  • SPSS如何制作基本统计分析报表之案例实训?
  • 青少年软件编程(C语言) 等级考试试卷(五级)2021年12月
  • 【MySQL入门指南】外键约束使用详解
  • 服务器性能调优
  • 理解什么是sql注入攻击 + xss攻击 + cors 攻击
  • 吴恩达 Chatgpt prompt 工程--1.Guidelines
  • 每日一题137——删除链表的节点
  • Nginx反向代理和负载均衡
  • 回炉重造十一------ansible批量安装服务
  • Java IO流第一章
  • “BIM+智慧工地”精准“数字化”变身智慧工程“管家”
  • 国内首款多节点/无需密钥/无需登录的ChatGPT客户端开源项目
  • v2c - 从Verilog 转换到 C语言的工具
  • DDS基本原理与FPGA实现
  • 19安徽比赛