python高阶函数基础十一:高阶函数与实参无参

1.函数就是变量
python中定义函数就是定义类型是function的变量,函数名就是变量名
变量能做的事情,函数都能做

变量作为序列的参数
变量作为函数的参数
变量作为函数的返回值
注意:函数体在定义的时候,不会执行

list1 = []
for x in range(0, 5):
    list1.append(lambda y: y * x)

print(list1[2](3))
print(list1[4](3))

x = 0 [lambda y:yx]
x = 1 [lambda y:y
x],[lambda y:yx]
x = 2 [lambda y:y
x],[lambda y:yx],[lambda y:yx]
x = 3 [lambda y:yx],[lambda y:yx],[lambda y:yx],[lambda y:yx]
x = 4 [lambda y:yx],[lambda y:yx],[lambda y:yx],[lambda y:yx],[lambda y:yx]
执行第二个[lambda y:y
x],y为3,x为4 值为12
执行第四个[lambda y:y*x],y为3,x为4 值为12

1。实参高阶函数
参数是函数的函数就是实参高阶函数
2.系统常见的实参高阶函数的使用
max、min、sorted、map、reduce
1)max\min
max(序列) - 比较序列中元素的大小来获取最大值元素
max(序列,key = 函数) - 函数决定求最大值的时候的比较对象
参数key的要求:a.是一个函数 b。这个函数有且只有一个参数(序列中的参数)
c.函数有一个返回值(比较对象)

students = [
    {'name': '小明', 'age': 23, 'score': 90},
    {'name': '张三', 'age': 30, 'score': 78},
    {'name': '小红', 'age': 18, 'score': 82},
    {'name': 'Tom', 'age': 26, 'score': 99}
]
# 求所有学生中成绩最好发学生
print(max(students, key=lambda item: item['score']))


def f2(item):
    print(f'item:{item}')
    return item['score']


print(max(students, key=f2))

2)sorted
sorted(序列) - 比较序列中元素的大小对序列中的元素从小到大排序
sorted(序列,key = 函数)- 函数决定排序的时候比较大小的比较对象

students = [
    {'name': '小明', 'age': 23, 'score': 90},
    {'name': '张三', 'age': 30, 'score': 78},
    {'name': '小红', 'age': 18, 'score': 82},
    {'name': 'Tom', 'age': 26, 'score': 99}
]
print(sorted(students, key=lambda item: item['age']))


def a(x):
    return x['age']


print(sorted(students, key=a))

3)map
map(函数,序列) - 将序列按照指定的方式进行转换,返回值是一个map对象(map对象是序列)
函数:1.有一个参数(这个参数指向原序列中的元素)2.需要一个返回值(新序列中的元素)

nums = [19, 78, 76, 55, 30, 12]
result = map(lambda item: item % 10, nums)
print(list(result))

# 练习:获取班级所有学生的总成绩
c = [90, 89, 88, 99, 27, 76, 56]
e = [98, 78, 66, 82, 90, 12, 78]
m = [23, 98, 100, 72, 69, 27, 96]
result = map(lambda item1, item2, item3: item1 + item2 + item3, c, e, m)
print(list(result))

4)reduce 将所有数据进行一个共同的操作
from functools import reduce 要加这段调用
reduce(函数,序列,初始值)
函数的要求:a.需要两个参数:
第一个参数 - 第一次指向初始值;从第二次开始,指向上一次的运算结果
第二个参数 - 指向序列中的每个元素
b.需要一个返回值(决定运算规则)

# 将数字序列中的元素全部拼接在一起
# [10, 89, 78, 20] -> 10897820
nums = [10, 89, 78, 20]
result = reduce(lambda s,item:s+str(item),nums,'')
print(result)

1.什么是装饰器
装饰器的作用:用来给函数添加功能
本质:就是一个函数(实参高阶函数+返回值高阶函数+糖语法)
用法(套路):
def 函数名1(参数1):
def函数名2(*args,**kwarg):
新增功能的代码
调用原函数的代码:参数1(*args,**kwarg)
return 原函数的返回值
return 函数名2
说明:
函数名1 - 装饰器的名称,根据新增的功能来命名
参数1:- 需要添加功能的函数(原函数),一般命名成f、fn
函数名2 - 添加完功能的新函数的函数名,nuw_f、new_fn

猜你喜欢

转载自blog.csdn.net/SaharaLater/article/details/111564657