千家信息网

Python2和Python3主要区别是什么

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要为大家展示了"Python2和Python3主要区别是什么",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Python2和Python3主要区别
千家信息网最后更新 2025年02月01日Python2和Python3主要区别是什么

这篇文章主要为大家展示了"Python2和Python3主要区别是什么",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Python2和Python3主要区别是什么"这篇文章吧。

Python2 和 Python3 的一些主要区别。

print

程序调试时用得最多的语句可能就是 print,在 Python2 中,print 是一条语句,而在 Python3 中是作为函数存在的。有人可能就有疑问了,我在 Python2 中明明也看到当函数使用:

# py2
print("hello") # 等价 print ("hello")

#py3
print("hello")

然而,你看到的只是表象,上面两个表达式有什么区别?从输出结果来看是一样的,但实质上,前者是把 ("hello")当作一个整体,而后者 print()是个函数,接收字符串作为参数。

# py2
>>> print("hello", "world")
('hello', 'world')

# py3
>>> print("hello", "world")
hello world

这个例子就更明显了,在 py2 中,print语句后面接的是一个元组对象,而在 py3 中,print 函数可以接收多个位置参数。如果希望在 py2 中 把 print 当函数使用,那么可以导入 future 模块 中的 print_function

# py2
>>> print("hello", "world")
('hello', 'world')
>>>
>>> from __future__ import print_function
>>> print("hello", "world")
hello world

编码

Python2 的默认编码是 asscii,这也是导致 Python2 中经常遇到编码问题的原因之一,至于是为什么会使用 asscii 作为默认编码,原因在于 Python 2 出来的时候还没出现 Unicode。Python 3 默认采用了 UTF-8 作为默认编码,因此你不再需要在文件顶部写 # coding=utf-8 了。

# py2
>>> sys.getdefaultencoding()
'ascii'

# py3
>>> sys.getdefaultencoding()
'utf-8'

网上不少文章说通过修改默认编码格式来解决 Python2 的编码问题,其实这是个大坑,不要这么干。

字符串

字符串是最大的变化之一,这个变化使得编码问题降到了最低可能。在 Python2 中,字符串有两个类型,一个是 unicode,一个是 str,前者表示文本字符串,后者表示字节序列,不过两者并没有明显的界限,开发者也感觉很混乱,不明白编码错误的原因,不过在 Python3 中两者做了严格区分,分别用 str 表示字符串,byte 表示字节序列,任何需要写入文本或者网络传输的数据都只接收字节序列,这就从源头上阻止了编码错误的问题。

True和False

True 和 False 在 Python2 中是两个全局变量(名字),在数值上分别对应 1 和 0,既然是变量,那么他们就可以指向其它对象,例如:

# py2
>>> True = False
>>> True
False
>>> True is False
True
>>> False = "x"
>>> False
'x'
>>> if False:
... print("?")
...
?

显然,上面的代码违背了 Python 的设计哲学 Explicit is better than implicit.。而 Python3 修正了这个缺陷,True 和 False 变为两个关键字,永远指向两个固定的对象,不允许再被重新赋值。

# py3
>>> True = 1
File "", line 1
SyntaxError: can't assign to keyword

迭代器

在 Python2 中很多返回列表对象的内置函数和方法在 Python 3 都改成了返回类似于迭代器的对象,因为迭代器的惰性加载特性使得操作大数据更有效率。Python2 中的 range 和 xrange 函数合并成了 range,如果同时兼容2和3,可以这样:

try:
range = xrange
except:
pass

另外,字典对象的 dict.keys()、dict.values() 方法都不再返回列表,而是以一个类似迭代器的 "view" 对象返回。高阶函数 map、filter、zip 返回的也都不是列表对象了。有,py2的迭代器必须实现 next 方法,而 py3 改成了 __next__

nolocal

我们都知道在 py2 中可以在函数里面可以用关键字 global 声明某个变量为全局变量,但是在嵌套函数中,想要给一个变量声明为非局部变量是没法实现的,py3 新增了关键字 nolcoal,使得非局部变量成为可能。

def func():    c = 1    def foo():        c = 12    foo()    print(c)func()    #1

可以对比上面两段代码的输出结果

def func():    c = 1    def foo():        nonlocal c        c = 12    foo()    print(count)func()   # 12

其实很多内建模块也做了大量调整,Python3 中的模块组织更加清晰,类更加先进,引入了异步IO,这次先写这么多,下次再继续。

以上是"Python2和Python3主要区别是什么"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

函数 编码 对象 变量 字符 字符串 两个 迭代 问题 关键 关键字 内容 原因 字节 序列 方法 模块 篇文章 语句 明显 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南中汐互联网科技有限公司 腾飞网络技术 网络安全我们同行手抄报 江汉区国际网络安全维护资费 杨纪文网络安全产业联盟 分布式数据库 书籍 access搭建图片数据库 网络安全实用技术课后答案 中移铁通软件开发人员 杨浦区营销网络技术优势 西城区综合软件开发创新服务 手机银行app软件开发框架 服务器安全组端口设置 游戏服务器地址查询 网络安全第一责任人 工信部 服务器做raid教程 只有分离的数据库才能附加 开展网络安全监测和预警 服务器内存检测机构 云南软件开发服务平台 怎么看远程服务器管理器 京东软件开发面试提交流水后 数据库数据导入导出的常见故障 互联网科技通讯计划书 安全网络技术手抄报 怎样设置静态文件服务器 停车场系统连不上服务器 安徽移动网络安全周 数据库中概念从大到小 南昌计算机网络技术好的学校
0