从Python 2到Python 3的几个坑

版权声明:本文为博主原创文章,可以转载但必须注明出处。 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]就代表这一项的“属性”,即拿什么出来比。

(未完待续)

猜你喜欢

转载自blog.csdn.net/nirendao/article/details/79521583