您的位置:首页 >学习Python 2还是Python 3?
发布于2026-05-03 阅读(0)
扫一扫,手机访问
答案很明确:都要学!
是不是心里正犯嘀咕呢?
Python 3 才是Python的未来。
Python 官方都建议直接学习Python 3。
Python 2 只维护到2020年。
Python 2慢慢的就没人用了。
那么,我们不妨深入探讨一下Python 2和Python 3的具体区别。
Python官网确实白纸黑字写着:Python 2到2020年停止维护。但这,真的能成为你拒绝学习它的理由吗?
这事儿其实不难理解。想想看,Windows XP停止更新后,多少基础教学和入门环境还得依赖它?前阵子,微软宣布将在2020年对Win 7停止技术支持,意味着之后即便发现BUG和安全漏洞,也不会再修复。然而,环顾一下四周的同事、朋友、亲戚,用Win 7的多,还是用Win 10的多?
再说回Python,据说按照官方最初的计划,Python 2的支持本应止步于2015年,结果一推就推到了2020年。未来会不会再次延迟?谁也说不准。
但有意思的是,在Python社区里,总有一波声音在催促大家升级到Python 3。可现实情况是,很多用户其实并不关心自己用的是2还是3,代码能跑、项目能转就行。因此,对于大量使用者而言,从Python 2升级到Python 3的动力,其实并没有想象中那么强烈。
如果你坚持认为,Python 3才是未来,完全不想碰Python 2的项目。那么,设想一个场景:女神对你说,“晚上来我家帮我修下电脑呗”,但她的电脑系统是Windows XP或者Win7,你,是去还是不去?
数据不会说谎。根据官网的下载量统计,Python 2的使用量远超Python 3,前者大约是后者的8倍。所以,想学Python就直接抛弃Python 2?这事儿几乎不可能。
来看一组更具体的统计:
10% 的开发者使用 Python 3
20% 的开发者同时使用Python 2和Python 3,但Python 2用得更多
高达70% 的开发者主要使用Python 2
这意味着,如果你一开始就只学Python 3,并坚信这是未来,拒绝了解Python 2,那么你可能会与国内大半个互联网行业的机会失之交臂。当然,你可能不在乎。但换个角度想,如果有人愿意付你高薪,只为了维护一套Python 2的祖传代码呢?
我们都清楚,在任何一家成熟的公司,升级服务器操作系统或程序代码版本,都是一个需要反复评估、慎之又慎的决策。因此,完全有理由相信,Python 2的生命周期会比2020年这个截止日期长得多。具体多长?至少比2020年要长。
拿Windows系统来类比就非常形象。当微软宣布停止更新Windows 7时,依然有大量用户坚守阵地。问及原因,答案五花八门:“新系统好卡啊”、“好多软件不兼容”、“改变太大不习惯”,甚至有人认为“Win7已经很完美了,出新系统就是为了坑钱”。
年复一年,每当新技术出现,这部分人的想法似乎从未改变。
如果把这里的“Windows 7”换成“Python 2”,“Windows 10”换成“Python 3”,是不是感到一丝熟悉的寒意?拥抱新事物、新技术固然要积极,但将旧事物全盘否定、彻底抹杀,也绝非明智之举。
其次,从Python 2到Python 3确实存在差异,这是技术发展的必然。但差异真有传说中那么大吗?其实不然。这更像是一次优化和提升,而非彻头彻尾的改头换面。两者之间的语法差异,不到Python总语法的10%。我们完全可以通过快速了解Python 3中弃用了哪些Python 2的语法,并在编码时主动规避。有趣的是,在Python的最佳实践中,那些在Python 3里被弃用的语法,在Python 2里也同样不推荐使用——不然它们也不会被弃用了。如果你本就遵循并坚持这些最佳实践,那么对你而言,Python 2和Python 3的差异感将会更小。
下面,我们以Python 2.7和Python 3.6为例,从宏观上梳理一下两者的主要区别:
统一了字符编码支持。增加了新的语法。print、exec等成为了函数。修改了一些语法。对一些语法进行删除和修改,但整体变化不大,约10%。修改了一些模块。优化。其它。
具体来说,Python2与Python3的区别主要体现在以下几个方面:
print函数整数相除Unicode异常处理xrangemap函数不支持has_key其它
1、print函数
在Python 2中,print是一个语句(statement),而在Python 3中,print变成了一个函数。因此在Python 3中调用print必须加上括号,否则会报SyntaxError(语法错误)。
Python 2
print "hello world"
输出
hello world
Python 3
print("hello world")
输出
hello world
若在Python 3中尝试不加括号:
print "hello world"
输出
File "", line 1
print "hello world"
^
SyntaxError: Missing parentheses in call to 'print'
2、整数相除
在Python 2中,3/2的结果是整数(1),而在Python 3中,结果则是浮点数(1.5)。
Python 2
print '3 / 2 =', 3 / 2
print '3 / 2.0 =', 3 / 2.0
输出
3 / 2 = 1
3 / 2.0 = 1.5
Python 3
print('3 / 2 =', 3 / 2)
print('3 / 2.0 =', 3 / 2.0)
输出
3 / 2 = 1.5
3 / 2.0 = 1.5
3、Unicode
Python 2有两种字符串类型:str和unicode。Python 3则简化了这一点,默认字符串就是Unicode,其str类型相当于Python 2中的unicode类型。
在Python 2中,如果代码文件包含非英文字符,必须在文件开头声明编码,例如:
# -*- coding: utf-8 -*-
而在Python 3中,由于默认使用Unicode,这个麻烦就省去了。
4、异常处理
异常处理的语法有所不同。
5、xrange
Python 2中有range和xrange两个函数。区别在于,range直接返回一个完整的列表(list),而xrange返回一个迭代器(iterator),在循环中逐个生成数字,更节省内存。Python 3中取消了xrange,其range函数的行为就等同于Python 2中的xrange。
6、map函数
在Python 2中,map函数返回一个列表(list)。在Python 3中,map函数返回一个迭代器(iterator)。
7、不支持has_key
Python 3中的字典(dict)不再支持has_key方法,检查键是否存在应使用`in`操作符。
8、其它
Python3 采用的是绝对路径的方式进行 import,Python2 中相对路径的 import 会导致标准库导入变得困难。Python3 使用更加严格的缩进。Python2 的缩进机制中,1 个 tab 和 8 个 space 是等价的,所 以在缩进中可以同时允许 tab 和 space 在代码中共存。这种等价机制会导致部分 IDE 使用存在问题。 Python3 中 1 个 tab 只能找另外一个 tab 替代,因此 tab 和 space 共存会导致报错。
Python 2和Python 3师出同门,有相同之处,也有不同之处。怎么用这把“剑”杀敌,剑在你手里,招式看你的选择。核心要义就三个字:快!准!狠!
必须承认,python3 和 python2 是不兼容的,而且差异确实存在。
所以,先学Python2还是先学Python3,这本身不是问题,或者说,都是问题。
无论你选择从哪一边开始,都需要留意另一边的不同点。所幸这些不同点很容易掌握,而它们之间大量的共同点,才是我们需要投入精力好好学习的核心。毕竟,天下武功,其内核总有相通之处。
最后,给几点具体的建议:
如果你是在企业中因工作需要而学习Python,那么最直接的方式是看企业主要使用的Python版本是什么,就学什么。
如果你追求最成熟的解决方案、最少的未知bug和最稳定的应用环境,那么Python 2目前仍是更稳妥的选择。
如果你是在校大学生,那么建议从Python 3开始学起,等到毕业时,它很可能已成为真正的主流。
如果你是个人爱好者自学,同样建议从Python 3起步,拥抱趋势,面向未来。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9