为了账号安全,请及时绑定邮箱和手机立即绑定

python3.x sorted高阶函数

python3.x sorted高阶函数

慕粉3204255 2016-04-25 15:56:05
def reversed_cmp(x, y):     if x > y:         return -1     if x < y:         return 1     return 0>>> sorted([36, 5, 12, 9, 21], reversed_cmp) [36, 21, 12, 9, 5]请问在3.x中怎么用呢
查看完整描述

3 回答

已采纳
?
清波

TA贡献165条经验 获得超90个赞

题主在 Python3.x 中写的代码如下:

def reversed_cmp(x,y):
    if x>y:
        return -1
    if x<y:
        return 1
    return 0
    
sorted([36, 5, 12, 9, 21], reversed_cmp)

## 报错信息如下:
TypeError: must use keyword argument for key function
类型错误: 必须使用关键字参数。

## 解释,这是什么意思呢,首先 sorted()函数 在Python2.x 和 Python3.x 中有所不同:
sorted(iterable, cmp=None, key=None, reverse=False)       ## Python 2.x
sorted(iterable, key=None, reverse=False)                 ## Python 3.x
## 由此可看出, Python 3.x 取消了 cmp 参数, 所以如果想给 sorted()函数传参的话, 就剩下 key, 和reverse了,
## 其中,reverse 就是返回 正常排序的反序, 而key 的用法,我在下面 答复中的url 中有详解。 所以题主如果想在
## Python3.x 中得到 上面代码的正确答案, 其实代码很简单:
sorted([36, 5, 12, 9, 21], reverse=True)


查看完整回答
反对 回复 2016-04-25
?
Markberg

TA贡献1条经验 获得超0个赞

import functools

functools.cmp_to_key

就可以了


查看完整回答
反对 回复 2016-04-25
?
清波

TA贡献165条经验 获得超90个赞

不粘贴了, 直接贴 url,这是我在另外一个猿问中回答的:

http://www.imooc.com/wenda/detail/314966


Python3.x 中取消了 sorted() 的 cmp 参数, 所以不要看 cmp 部分就好。


查看完整回答
反对 回复 2016-04-25
  • 3 回答
  • 0 关注
  • 4781 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信