我先抛出我的观点,不要让你的思维迁就于你的工具,而是让你的工具迁就于你的思维!
python2和python3,从他们实现的精髓而言,其实真的没有太多本质的区别,我目前所感知的python3与python2的最大差别在于:
- python3的range相当于python2的xrange。
- python3对于iterable(可迭代)对象全部采用惰性取数的原则,也就是在用的时候才去取数,比如range (10)是一个range可迭代对象,而不是一个列表。一般如果要将可迭代对象迭代出,那么再对象外套一个list()就可以实现了(这种情况再使用map函数尤为明显,你必须这样套用list(map(...)))循环出map的内容)。
- 对于生成器取消其next方法,next直接生格为内置函数的级别。也就是对于生成器a,要循环出第1个元素,python2可以用a.next(), 但是这在python3会报错,需改用next(a)。
- python3采用unicode编码,解决了python2上很多的乱码问题。
- python2将于2020年停止更新。
- python3的print()必须加后面的括号。
上面讲的好像想表达python3优于python2, 新手入门应该优先选择python3。
但是这不是我的最终意愿,我其实更想表达的是,这只是他们的一些细微上面的差别,对于新手入门来说,他们其实只是会造成些微的困扰而已!!!
你究竟应该选择python2还是python3,应该取决你所选定的那本教材使用的是哪一个版本的python!
比如,learn python the hard way和利用python进行数据分析, 他们用的python版本是2,所以如果你是初学者的话,你应该优先选择python2,这样子可以最大程度的避免你刚入门时候的,虽然你敲了一模一样的代码,但还是报错的困扰和挫折感。至于那些对这些困扰不在乎,可以自己搜索答案解决问题的同学来说,他们即使是用python3来运行书中的代码也是ok的,因为毕竟2个版本的差别并没有那么大!
最后,讲一下我的python版本使用,我入门是用的python 2.7, 入门书是learn python the hard way以及廖雪峰的python2.7教程,上的MITx 6.00.1x还有后来学习的利用python进行数据分析都是用的是python2.7,但是我现在则主要用python3,主要是这样子遇到乱码的几率会比较小,而且我用的那些包,如numpy, pandas, requests, bs4, scrapy等等都有python3的版本了。此外,当你对python熟悉到一定程度其实这个版本转换的成本是很小的!
愿你看了本文后,不会再对python版本的选择问题产生纠结!
祝生活愉快!
凡星
2017.05.17