实参高阶函数和装饰器
1.函数的本质
python中定义函数其实就是在定义一个类型是function的变量,函数名就是变量(变量能做的函数都可以做)
2).变量的常用操作
# 1)
a = 10
x1 = a
print(x1, x1 + 10)
x2 = func1
x2()
# 2.1)
list1 = [a, 100]
print(list1, list1[0] * 10)
list1 = [func1, 100]
print(list1, list1[0]())
2.高阶函数
实参高阶函数 - 如果一个函数的参数是函数,那么这个函数就是实参高阶函数 (掌握怎么使用系统提供的实参高阶函数)
返回值高阶函数 - 如果一个函数的返回值是函数,那么这个函数就是返回值高阶函数(会写装饰器)
常用实参高阶函数:max、min、sorted、map、reduce
max和min、sorted
max(序列, key=函数)
sorted(序列, key=函数)
列表.sort(key=函数)
函数的要求:
a. 有且只有一个参数,这个参数指向的数前面序列中的每个元素
b. 需要一个返回值,返回值决定求最大值的时候比较的对象
求列表nums中十位数最大的元素:
nums = [28, 607, 65, 19, 85]
result = max(nums, key=lambda item: item // 10 % 10)
print(result)
2.map函数 - 将原序列中元素按照指定的标准进行变换,产生一个新的序列
1)map(函数, 序列)
函数的要求:
a.有且只有一个参数,这个参数指向的是后面这个序列每个元素
b.需要一个返回值,描述新序列中的元素和原序列中元素的关系
2)map(函数, 序列1, 序列2)
函数的要求:
a. 有且只有两个参数,这两个参数分别指向后面的两个序列中的元素
b. 需要一个返回值,描述新序列中的元素和原序列中元素的关系
map(函数, 序列1, 序列2, 序列3)
scores = [29, 89, 67, 56, 34, 90]
ages = [23, 30, 19, 24, 25, 23]
result = map(lambda item1, item2: {'score': item1, 'age': item2}, scores, ages)
print(list(result))
reduce函数 - 将序列中所有的元素通过指定的方式合并成一个数据
reduce(函数, 序列, 初始值)
函数的要求:
a. 有且只有两个参数:第一个第一次指向初始值,从第二次开始指向上一次的计算结果;第二个参数指向序列中的每个元素
b. 需要一个返回值,返回值用来描述合并规则
nums = [20, 34, 45, 10]
result = reduce(lambda x, item: x+item, nums, 0)
print(result)
1. List item