函数预设默认值

用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列,可以在Python的交互环境下查看一下sorted函数的语法定义。

>>> help(sorted)
Help on built-in function sorted in module __builtin__:

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

 

在sorted函数的形参里出现了cmp=None等字样,这个不是之前的两个星号**的问题,这个是参数预设值问题。这样设计函数的好处是,函数的使用具有多样性,可以根据实际情况使用不同的函数调用方式来完成任务。

1 sorted用法

li = [5,3,1,2,4]
ret = sorted(li)
print (li)
print (ret)

程序运行结果:

[5, 3, 1, 2, 4]
[1, 2, 3, 4, 5]

 

(1) sorted的reverse的默认值是False例子里sorted(li)并未对reverse设置任何值采用默认值False即升序,如果想逆序排序,在使用sorted函数时就需要明确对reverse进行赋值为True了,从而得到逆序排序,这样sorted函数的使用方式就需要传两个参数了,这样函数使用就有多样性了。

li = [5,3,1,2,4]
ret = sorted(li, reverse = True)
print (li)
print (ret)

程序执行结果:

[5, 3, 1, 2, 4]
[5, 4, 3, 2, 1]

 

(2)sorted的key形参,参数key官方解释如下"The value of the key parameter should be a function that takes a single argument and returns a key to use for sorting purposes. This technique is fast because the key function is called exactly once for each input record."。中文含义:key 可以接收函数,这个函数只有一个参数,函数本身会在比较排序之前作用于可迭代数据集合的每个元素项,函数的返回值作为排序依据,意思有点像数据库的键的概念。用大白话来说如果sorted所排序的集合的每个元素也是集合,sorted可以依据指定每个元素集合的某元素作为排序的依据。

li = "hello Python, life is short!".split()
print (li)
ret = sorted(li)
print ("key = None", ret)
ret = sorted(li, key = lambda x : x[0])
print ("key = x[0]", ret)
ret = sorted(li, key = lambda x : x[1])
print ("key = x[1]", ret)

程序执行结果:

['hello', 'Python,', 'life', 'is', 'short!']
key = None ['Python,', 'hello', 'is', 'life', 'short!']
key = x[0] ['Python,', 'hello', 'is', 'life', 'short!']
key = x[1] ['hello', 'short!', 'life', 'is', 'Python,']

 

第一次使用sorted没有用key,第二次使用sorted使用了key指定key = lambda x : x[0] 啥意思?对于li是个列表(集合),它的每个元素是字符串,也是集合类型,默认对li的排序是比较字符串首字母的大小进行排序,而key = lambda x : x[0] 的出现改变了排序规则,但还以第1个字母为基准进行排序,所以两次都是首字母排序,而第三次使用的sorted排序是以第2字母为机制排序所以后两次的排序结果不一样。

再来一个相似的例子:

li = [(5, "hello"), (3, "python"), (6, "good"), (1, "like")]
print (li)
ret = sorted(li)
print ("key = None", ret)
ret = sorted(li, key = lambda x : x[0])
print ("key = x[0]", ret)
ret = sorted(li, key = lambda x : x[1])
print ("key = x[1]", ret)

这个例子和上一个例子差别在于li的不同,但排序规则相同,程序执行结果如下,

[(5, 'hello'), (3, 'python'), (6, 'good'), (1, 'like')]
key = None [(1, 'like'), (3, 'python'), (5, 'hello'), (6, 'good')]
key = x[0] [(1, 'like'), (3, 'python'), (5, 'hello'), (6, 'good')]
key = x[1] [(6, 'good'), (5, 'hello'), (1, 'like'), (3, 'python')]

 

此时的li是元组组成的列表,元组有两个数据项,可以依据元组的第一项数据排序,也可依据字符串的大小关系ret = sorted(li, key = lambda x : x[1])进行排序。

 

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hamilton_Huan

原创不易,结合业务原创更不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值