IT培训网更多 收回

IT培训
关注我们
微信公众号 回复"大礼包"享福利 学习交流群 分享IT知识
|

IT在线学习更多 收回

热门课程 更多 >
  • Java开发
  • Web前端
  • Python+人工智能
  • 全链路UI/UE设计
  • VR/AR游戏开发
  • 大数据
  • 室内设计
  • PMP认证
  • 互联网营销
  • 全域电商运营
  • 新媒体与短视频运营
  • 软件测试
  • Linux云计算
  • Office
  • 计算机二级
  • 计算机软考
OAO训练营
不离岗 不离校 学门IT技术
优学VIP
16大类IT课程 提升职场竞争力
关注我们
下载【IT优学】 缓存视频随时随地学 微信扫码关注 回复“大礼包”享福利
| 初高中软件培训| 中公企商培训| 中公联合办学| 优校邦| 中公PMP| 中公软考| 计算机二级培训| 趣码AI
登录 | 注册
400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > python > 【Python基础知识】Python高阶函数

【Python基础知识】Python高阶函数

  • 发布: python培训
  • 来源:python干货资料
  • 2020-11-25 10:59:12
  • 阅读()
  • 分享
  • 手机端入口
  • 活动 5天IT课程 申请试学
  • 活动 申请免费基地参观
  • 活动 申请中公购书补助

高阶函数是指接收函数为参数,或者将函数作为结果返回的函数。

(1)sorted()函数

sorted()函数用于对可迭代对象进行排序。除此之外,sorted()函数是高阶函数,可以传递给sorted()函数一个自定义的函数作为参数,这个参数的名字是key,必须以关键字参数的形式传递。sorted()函数要比较的每个值都会传入key指定名称的函数内,并根据该函数的返回值进行比较,以实现按自定义的排序方式进行排序。

例如,下面的列表中包含了一些代表动物的字符串,将它们进行排列:

  1. >>> animals = ['panda''lion''tiger''fox''elephant'
  2. >>> sorted(animals)   # 未指定key参数 
  3. ['elephant''fox''lion''panda''tiger'
  4. >>> sorted(animals, key=len)   # 指定key参数的值为len 
  5. ['fox''lion''panda''tiger''elephant'

在未指定key参数的情况下,列表按照字典顺序排序。在指定key参数的值为len的情况下,列表按照字符串的长度排序(len()函数),animals列表中的每个字符串都“输入”len()函数,再将字符串的长度作为返回值“输出”,如'fox'的长度为3,数值最小,故排在第一位,'elephant'长度为8,数值最大,故排在最后一位。注意,此处len()函数没有括号,是将函数名作为参数,如果加上括号,那么是调用函数。

再举另外一个示例,字符串的lower()方法是将字母变成小写字母,同样也可以使用str.lower()将lower()方法作为函数使用,下面两种方式是等价的:

  1. >>> 'P'.lower() 
  2. 'p' 
  3. >>> str.lower('P'
  4. 'p' 

知道这个知识后,就能将str.lower()函数用在字符串排序中了。下面的示例中,将含有字母的列表排序:

  1. >>> letters = ['a''Y''z''B'
  2. >>> sorted(letters)   # 未指定排序方式,按默认方式排序,大写字母总在小写字母前面 
  3. ['B''Y''a''z'
  4. >>> letters = ['a''Y''z''B']  
  5. >>> sorted(letters, key=str.lower)   # 将所有字母全部变为小写字母再排序 
  6. ['a''B''Y''z'

除了使用内建函数之外,当然也可以使用自定义的函数来指定排序规则。仍然使用前面的animals列表,这次将'panda'排在第一位,剩下的动物依旧按照字符串的长度排序。

  1. >>> animals = ['panda''lion''tiger''fox''elephant'
  2. >>> def panda_first(animal): 
  3. ...     if animal == 'panda':   # 如果是'panda',返回0,使其排在第一位 
  4. ...         return 0 
  5. ...     else:   # 如果是其他动物,那么返回它的长度 
  6. ...         return len(animal) 
  7. ...  
  8. >>> sorted(animals, key=panda_first)   
  9. ['panda''fox''lion''tiger''elephant'

然而,通常为了给key参数提供一个值而编写一个普通函数是不太值得的,往往使用匿名函数即可:

  1. >>> animals = ['panda''lion''tiger''fox''elephant'
  2. >>> sorted(animals, key=lambda animal: 0 if animal == 'panda' else len(animal)) 
  3. ['panda''fox''lion''tiger''elephant'

这个匿名函数看起来有些复杂,它的参数是animal,表达式是一个三目表达式:如果animal的值是'panda',返回0,否则返回animal的长度。使用匿名函数可以在一行内方便地将列表排列成指定顺序。

使用sorted()函数和匿名函数还可以用来给字典排序。例如,将下面的水果字典(将字典的值想象为水果数量)按照水果数量从大到小的顺序排序:

  1. >>> fruits = {'apple'10'banana'42'orange'5'mango'18
  2. >>> sorted(fruits.items(), key=lambda item: item[1])   #比较字典的第2项 
  3. [('orange'5), ('apple'10), ('mango'18), ('banana'42)] 

由于sorted()函数只能对可迭代对象进行排序,而字典的items()方法返回的值可以迭代,因此,可以使用items()方法进行迭代。

(2)max()函数和min()函数

max()函数和min()函数也是高阶函数,与sorted()函数的相似之处在于,它们也要经过比较才能返回值(可以理解为sorted()排序后的最大值和最小值)。max()函数和min()函数也有key参数,作用机制与sorted()函数一致。

例如,下面的字典中存储着各个同学的分数,使用max()找到分数最高的同学:

  1. >>> grade = {'小明'72'梅梅'81'丽丽'58
  2. >>> max(grade.items(), key=lambda item: item[1]) 
  3. ('梅梅'81

假设老师给小明加了10分,那么需要改动匿名函数:

  1. >>> grade = {'小明'72'梅梅'81'丽丽'58
  2. >>> max(grade.items(), key=lambda item: item[1] + 10 if item[0] == '小明' else item[1]) 
  3. ('小明'72

min()函数与max()函数是相似的,只是min()函数返回的是最小值:

  1. >>> numbers = [15400280082142100099
  2. >>> min(numbers) 
  3. 15 

下面将用自定义的函数作为key参数的值,这个参数返回一个数字各个位相加的和(由于这个函数稍微有些复杂,因此,建议使用def关键字定义函数):

  1. >>> def sum_digit(num): 
  2. ...     sum = 0  
  3. ...     while num: 
  4. ...         sum += num % 10 
  5. ...         num = num // 10 
  6. ...     return sum 
  7. >>> # 下面简单测试一下这个函数的正确性 
  8. >>> sum_digit(46)  # 4和6相加为10 
  9. 10 
  10. >>> sum_digit(99)  # 9和9相加为18 
  11. 18 
  12. >>> sum_digit(1000# 1和0相加为1 
  13. 1 
  14. >>> # 下面使用这个函数作为key参数的值 
  15. >>> numbers = [15400280082142100099
  16. >>> min(numbers, key=sum_digit) 
  17. 1000 

学习疑问申请解答
您的姓名
您的电话
意向课程
 

中公优就业

IT小助手

扫描上方二维码添加好友,请备注:599,享学习福利。

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

优就业:ujiuye

关注中公优就业官方微信

  • 关注微信回复关键词“大礼包”,享学习福利
QQ交流群
在线疑问解答
(加群备注“网站”)
IT培训交流群 加入群聊 +
软件测试 加入群聊 +
全链路UI/UE设计 加入群聊 +
Python+人工智能 加入群聊 +
互联网营销 加入群聊 +
Java开发 加入群聊 +
PHP开发 加入群聊 +
VR/AR游戏开发 加入群聊 +
大前端 加入群聊 +
大数据 加入群聊 +
Linux云计算 加入群聊 +
优就业官方微信
扫码回复关键词“大礼包”
享学习福利

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料、活动优惠 领取通道
 
 
  • 申请试听
  • 干货资料
  • 网课咨询
  • 学习交流群
  • 返回顶部