Python 2到Python 3迁移指南
需积分: 9 31 浏览量
更新于2024-09-09
1
收藏 668KB PDF 举报
"这篇文档是针对想要转向使用Python 3的Python 2程序员编写的,旨在列出不同版本间改变的对象和习惯用法,并演示如何从Python 2风格过渡到Python 3.1风格。它还介绍了Python 3.1的一些新特性。如果你打算转换现有的程序或模块,首先应该使用2to3工具。对于全面的Python 3语言介绍,可以参考Mark Summerfield的《Programming in Python 3》第二版。"
在Python 2到Python 3的迁移过程中,主要的知识点包括:
1. 字符串和字符串格式化:
- Python 3的字符串默认是Unicode编码,不再需要使用`unicode()`函数将其他类型转换为Unicode字符串。例如,Python 2中的`unicode(x)`在Python 3中应写为`str(x)`。
- Unicode字符串表示也有所改变,Python 2中的`u"\u20AC"`在Python 3中简化为`"\u20AC"`。
- 在Python 3中,原始字符串(raw string)的前缀从`ur`变为`r`,如`ur"\w"`在Python 3中写为`r"\w"`。
2. 字符串格式化操作 `%` 已被弃用,推荐使用 `str.format()` 方法。这是更现代且可读性更强的字符串格式化方法。例如:
- Python 2中的`"%d%s" % (i, s)` 在Python 3中应转换为`"{i}{s}".format(i=i, s=s)`,或者使用字典形式`"{0[i]}{0[s]}".format({'i': i, 's': s})`。
- 使用关键字参数时,Python 3可以使用`**`运算符,如`"{i}{s}".format(**{'i': i, 's': s})`,这比Python 2的`"%(i)d%(s)s" % {'i': i, 's': s}`更加灵活。
3. 除了上述更改,还有其他一些重要的Python 3特性:
- 函数返回值默认为None,而不是Python 2中的NoneType。
- print语句变为print()函数,如`print x`在Python 3中需要写为`print(x)`。
- 非本地化异常处理的语法改变,如`except Exception, e`在Python 3中应写为`except Exception as e`。
- range()函数在Python 3中返回的是一个迭代器,而不是列表。如需列表,可使用list(range())。
- 全新的字典和集合操作,如字典的`update()`方法现在返回None,而不是旧版本中的self引用。
- 异常类的继承结构改变,许多标准库的异常类都从Exception派生。
这些改动要求程序员在从Python 2迁移到Python 3时,不仅要更新代码,还需要理解新特性的背后逻辑,以充分利用Python 3的优势。为了确保平稳过渡,建议使用2to3工具自动转换代码,并进行详尽的测试以确保所有功能都能正常运行。同时,阅读官方文档和相关的书籍,如《Programming in Python 3》第二版,可以帮助深入理解Python 3的语法和最佳实践。
2018-02-02 上传
2017-03-09 上传
2018-07-29 上传
2023-03-29 上传
2021-03-26 上传
153 浏览量
201 浏览量
2018-05-14 上传
2021-10-01 上传
commando23
- 粉丝: 0
- 资源: 4
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章