实参高阶函数和推导式的用法

实参高阶函数

定义: 如果一个函数的参数是函数,那么这个函数就是实参高阶函数
**应用:**除了写装饰器以外,一般不会自己去定义实参高阶函数,主要是使用系统已经定义好的实参高阶函数。系统中常用的实参高阶函数:max、min、sorted、reduce、map

1)max、min
用法:

  1. max(序列)\min(序列) - 获取指定序列中元素的最大值\最小值

  2. max(序列,key)\min(序列,key) - 参数key的类型是函数

key的要求:

  1. 是一个函数
  2. 有且只有一个参数,并且这个参数指向的是序列中的每一个元素
  3. 需要一个返回值,这个返回值就是比较大小的时候的比较对象

例:

nums = [1012, 34, 756, 78, 29]
print(max(nums))

print(max(nums, key=lambda item: item))    # 78; 比较元素本身的大小
print(max(nums, key=lambda item: item % 10))   # 29

2) sorted

  1. sorted(序列) - 将序列按照序列元素的大小进行排序,返回排序后的列表
  2. sorted(序列, key) -
    key的要求:
  3. 函数
  4. 有且只有一个参数(参数就是序列中的元素)
  5. 有一个返回值(比较大小的比较对象)

例:

nums = [73, 69, 57, 28, 71, 54]
print(sorted(nums))     # [28, 54, 57, 69, 71, 73]

# 按照个位数的大小从小到大排序: [71, 73, 54, 57, 28, 69]
print(sorted(nums, key=lambda item: item%10))    # [71, 73, 54, 57, 28, 69]

3) map
用法一:
map(函数, 序列) - 将序列按照函数给定的规则创建成一个新的序列
函数的要求: a.是一个函数 b.有一个参数(指向序列中的每个元素) c.一个返回值(产生新元素的规则)

用法二:
map(函数, 序列1, 序列2) - 将序列按照函数给定的规则创建成一个新的序列
函数的要求:
a.是一个函数
b.有两个参数(第一个参数指向第一个序列中的元素, 第二个参数指向第二个序列中的元素)
c. 一个返回值(产生新元素的规则)
注意:两个序列中元素的个数一致
例:

方法一:
生成一个新的列表,元素是nums中所有元素的个位数
nums = [23, 35, 67, 91, 25, 45]
new_nums = list(map(lambda item: item % 10, nums))
print(new_nums)    # [3, 5, 7, 1, 5, 5]

方法二:
strs = ['abc', 'how', 'you', 'love']
nums = [1, 20, 4, 60]
new_list = list(map(lambda x, y: x+str(y), strs, nums))
print(new_list)     # ['abc1', 'how20', 'you4', 'love60']

4)reduce
方法一:
reduce(函数, 序列) - 将序列中所有的元素按照函数规定的操作进行合并
函数的要求:
a.函数
b.有两个参数(第一个参数第一次指向的是序列的第一个元素,从第二次开始指向的是上次运算的结果;第二个参数指向的是序列第二个开始的每个元素)

方法二:
reduce(函数, 序列, 初始值) - 将序列中所有的元素按照函数规定的操作进行合并
函数的要求:
a.函数
b.有两个参数(第一个参数第一次是初始值,从第二次开始指向的是上次运算的结果;
第二个参数指向的是序列的每个元素)

例:

方法一:
nums = [12, 34, 45, 67, 89, 23]
求和
result = reduce(lambda x, y: x+y, nums)
print(result)   # 270

#方法二:
students = [
    {'name': '小明', 'score': 90, 'age': 23},
    {'name': '张三', 'score': 95, 'age': 22},
    {'name': '隔壁老王', 'score': 60, 'age': 35}
]

result = reduce(lambda x, y: x + y['score'], students, 0)
print(result)  # 245
推导式

什么是列表推导式 - 用来快速创建列表
方法一:
列表 = [表达式 for 变量 in 序列] - 产生一个新的列表,变量在序列中每取一个元素就将表达式的值添加到新列表中

方法二:
列表 = [表达式 for 变量 in 序列 if 条件语句]

方法三
列表 = [表达式 for 变量1 in 序列1 for 变量2 in 序列2 ]
列表 = [表达式 for 变量1 in 序列1 for 变量2 in 序列2 if 条件语句]
例:

方法一:
list1 = [10 for x in range(5)]
print(list1)  # [10, 10, 10, 10, 10]

方法二:
list5 = ['str'+str(x) for x in [10, 34, 15, 11, 78, 90, 99] if x % 2]
print(list5)    # ['str15', 'str11', 'str99']

方法三:
list7 = [f'{x}:{y}' for x in range(1, 5) for y in range(10, 14)]
print(list7)  # ['1:10', '1:11', '1:12', '1:13', '2:10', '2:11', '2:12', '2:13', '3:10', '3:11', '3:12', '3:13', '4:10', '4:11', '4:12', '4:13']

字典推导式
用法:
字典 = {key:value for 变量 in 序列}
字典 = {key:value for 变量 in 序列 if 条件语句}

例:

方法一:
dict1 = {x: x*2 for x in range(5)}
print(dict1)   # {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}

方法二:
dict2 = {'a': 1, 'b': 2, 'c': 3, 'd': [1, 2]}
dict3 = {value: key for key, value in dict2.items() if type(value) not in (dict, list, set)}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值