Python2和Python3之间的主要区别是什么?大多数缺陷无法通过其他方式修复。——摘自《流畅的Python》http://web.archive.org/web/20031002184114/www.amk.ca/python/writing/warts.html你可能没听说过学Java,纠结是学JDK6还是JDK7,并且从来没有听说过学习PHP纠结于学习PHP5或者PHP7,但是在Python社区中,却存在这样一个奇怪的现象:“学习Python到底是学2还是学3?”成了很多初学者的选择困惑。问题的“始作俑者”当然是Python。每个人都有不同的看法。有人说Python2是主流,大公司都在用。应该学2。也有人说Python3是以后的主流,大部分第三方框架基本都支持Python3。我个人的看法是Python2还会长期存在(只要那些用Python2的公司没倒闭,就会一直存在),找工作可能需要用2,Python3也是必须的掌握。因为越来越多的项目会优先考虑3,本质上都是同一种语言,只有很小一部分(1%?没有严格统计)不兼容,所以无所谓谁学的好,学一个,另一个需要很少的时间来掌握。今天介绍一下Python2和Python3的一些主要区别。打印可能是调试打印程序时最常用的语句。在Python2中,print是一条语句,而在Python3中,它作为一个函数存在。有些人可能会有疑问。我在Python2中也看到它是一个函数:#py2print("hello")#equivalentprint("hello")#py3print("hello")但是,你看到的只是表象,以上两者有什么区别表达?从输出结果来看,它们是一样的,但本质上,前者将("hello")作为一个整体来对待,而后者print()是一个接收字符串作为参数的函数。#py2>>>print("hello","world")('hello','world')#py3>>>print("hello","world")helloworld这个例子比较明显,在py2中,print语句后面跟着一个元组对象,在py3中,print函数可以接收多个位置参数。如果你想在py2中使用print作为一个函数,你可以在以后的模块中导入print_function#py2>>>print("hello","world")('hello','world')>>>>>>>from__future__importprint_function>>>print("hello","world")helloworldencodingPython2默认的编码是asscii,这也是Python2经常遇到编码问题的原因之一。至于为什么使用asscii作为默认编码,原因是Python2Unicode出来的时候并没有出现。Python3使用UTF-8作为默认编码,因此您不再需要在文件顶部编写#coding=utf-8。#py2>>>sys.getdefaultencoding()'ascii'#py3>>>sys.getdefaultencoding()'utf-8'网上很多文章都说Python2的编码问题可以通过修改默认编码格式来解决。其实这是个大坑,千万别做。字符串字符串是最小化编码问题的最大变化之一。在Python2中,字符串有两种,一种是unicode,一种是str。前者代表一个文本字符串,后者代表一个字节序列。但是两者之间没有明确的界限,开发者感到困惑,不明白编码错误的原因,但是在Python3中,两者是严格区分的,str用来表示字符串,byte用来表示表示字节序列。任何需要写入文本或通过网络传输的数据都只接收字节序列。这是从源码上面防止编码错误的问题。True和FalseTrue和False是Python2中的两个全局变量(名称),对应value中的1和0,既然是变量,就可以指向其他对象,例如:#py2>>>True=False>>>TrueFalse>>>TrueisFalseTrue>>>False="x">>>False'x'>>>ifFalse:...print("?")...?显然,上面的代码违背了Python的显式优于隐式的设计理念。不过,Python3修正了这个缺陷。True和False成为两个关键字,始终指向两个固定对象,不允许重新赋值。#py3>>>True=1File"
