Python2与Python3有哪些不同之处
众所周知,Python3是Python2的升级改进版,既包含了Python2的绝大部分内容,同时又做出了一些不一样的改变。据说,Python2将于2020年左右不再免费更新维护,作为Python2的坚定支持者,是不是有一种被抛弃的感觉呢。所以,此时最好的选择就是在努力维护python2在心中的核心地位的同时,好好地扩展python3才是上上之策。不过呢,笔者在用过python3之后,发现其确实在很多方面提出了改进,更具人性化。好了,闲话少说吧。那么Python3与Python2到底有哪些不同之处呢?
1. raw_input与input
从键盘中输入内容时,python2用的是raw_input,而python3使用的是input(如下图所示)
Python2:
Python3:
2. print与print()
打印时python2使用的是print + 内容
而python3则使用的是print(内容)
3. /与//的区别
python2中 / 表示整除(取整数),// 也表示整除(取整数),也就是说,python2中/和//都表示整除(取整数)
python3中 / 表示的是做除法运算(不一定为整数),而//表示的是整除(取整数)
因此,可以这样子理解,整除时,python2使用 / ,而python3使用 // 。这样子就不会乱了,个人理解哈
4. 不等运算符<>与!=
python2中<>与!=都可以使用,都表示不相等的判断
而python3就不一样了,python3表示不相等的判断时只能用!=
5.编码问题
python2默认编码为ASCII,这就是为什么我们在编写代码出现中文时需要在第一行加上#coding=utf-8
python3默认编码为utf-8,因此python3不需要再出现中文时需要在第一行加上#coding=utf-8
6.与MySQL的交互
python2与MySQL进行交互时,需要安装MySQLdb
而python3与MySQL交互时,需要安装的是pymsql
此外,python2与MySQL进行交互时,数据库密码为passwd="密码"
而python3与pymysql进行交互时,数据库密码为password="密码"
这个坑我踩过2333,当初用Django做第一个项目时,用的是python3,结果在与数据库交互生成迁移文件时报了一大推错,足有一张A4纸那么大。还好我不是吓大的,可还是花了不少精力去发现这个问题。可能是当初学mysql时,与python交互时用的是python2有关。
7. urllib2与urrlib3
python2中urrlib2与urllib3都可以,爬虫时往往需要urllib与urllib2一起使用,因为urllib提供了urlencode()
而在python3中只能用urllib3,urllib2已经不能用了。爬虫时只需urllib3即可,因为python3默认编码为utf-8
8. ConfigParser.py与configparser.py
python2中ConfigParser.py模块作用是使配置文件生效
python3中ConfigParser.py改为了configparser.py,作用不变
这个坑很容易踩2333,特别时用django做项目时,在python3 manage.py startapp 应用名创建应用时往往会报错,此时就需要看你的usr/lib/python3.x/目录下是ConfigParser.py还是configparser.py。
9. Django中导入文件
如在django项目下的某一个应用中views需要导入本应用中的models时
python2:直接导入
python3:from .models import *
10. 异常捕获
python2必须使用except....as.....
而python3没有此要求
11. 打开或创建文件
python2中可以使用open()或file()
而python3只能使用open()
12. 队列
python2中队列用的是Queue
python3中队列用的则是queue
13. 多线程
python中使用的是thread模块
python3中改成了_thread或threading(推荐使用)
14.加密
md5加密中,Python2使用import md5或者import hashlib;
而Python3只能使用import hashlib,使用方法hashlib.md5()。
15.urllib和urllib2
python2爬虫一般用urllib2,而python3之后,urllib2已经退出江湖了,也就是python3以上版本之后,不再用urllib2这个包了。而取而代之的就是urllib了,爬虫时一般使用urllib包中的request方法
python2.7
python3.5
16.cookielib与http.cookiejar
在想要获取某网站在浏览器中的cookie值时,可以使用cookiejar方法,不过这个方法在python2与python3中的用法有点不一样。
python2——使用cookielib包,然后使用CookieJar()方法创建一个cookie实例对象来保存cookie值
python3——使用的是http.cookiejar包,然后使用CookieJar()方法创建一个cookie实例对象来保存cookie值
目前为止,遇到的比较常用的基本上就这些了。可能由于时间的缘故,有些想不起来或者还没有遇到的,欢迎补充!