版权声明:本文为博主原创文章,可以转载但必须注明出处。 https://blog.csdn.net/nirendao/article/details/79521583
本博客收集遇到的从Python 2到Python 3因写法不同而导致的坑。给出Python 2和Python 3都能兼容的写法。
1. 如何兼容raw_input()和input()
Python 2:
raw_input() # 获取输入的字符串
input() # 获取数字输入
Python 3:
input() # 获取任意输入,都转为字符串
写一个Python2和Python3都兼容的接收用户输入的程序:
from six.moves import input
six是一个兼容Python 2和Python 3的库。所以要想达到兼容的效果,往往要用到six.
2. 数组的自定义排序
在Python 2中经常使用lambda函数来辅助做数组的自定义排序。比如,将某个dict按照value从大到小进行排序:
result = sorted(some_dict.items(), lambda x, y: cmp(x[1], y[1]), revert=True)
如果在Python 3中,这么做,就会引起错误:
TypeError: must use keyword argument for key function
那么,在Python 3中,应该怎么做呢?可以这样:
result = sorted(some_dict.items(), key=lambda x: x[1], reverse=True)
以上这个做法,对Python 2也是适用的。所以,这个例子就用不到six了。
这里有2个要点:
1. 一定要把”key=”明确写出来
2. lambda表达式中不用再像Python 2中那样写2个元素的比较,而是只写一个要比较的“属性”即可。在本例中,x代表d.items()里的每一项,而x[1]就代表这一项的“属性”,即拿什么出来比。
(未完待续)