人工智能学习中深度学习之python基础之高阶函数
高阶函数
概念:在普通函数的基础上满足以下的条件则可以称之为高阶函数(两个条件满足一个可称为高阶函数) 1.一个函数的参数是另一个函数 2.一个函数的返回值(return)是另一个函数
1.高阶函数的推导步骤
#关于高阶函数的推导过程分为一下几个步骤:#1.数字,字符串都可以赋值给变量
a = 10
b = '你好'#2.函数也可以赋值给一个变量
def sum(num1,num2):return num1+num2
res = sum
print(res(10,20)) #30#3.变量可以作为函数的参数,进行使用
c = 50
d = 60
print(res(c,d)) #110#4.函数也可以作为函数的参数,进行调用
def fn1(fn2):return fn2()def fn2():print("函数fn2被调用了") fn1(fn2) #函数fn2被调用啦#函数fn1可以称之为高阶函数#5.一个函数的返回值是另一个函数
def fn3(fn):return fndef fn4():print("函数fn4被调用啦")r = fn3(fn4)
r()#函数fn3也可以称之为高阶函数2.reduce函数
函数作用:reduce函数会对参数序列的元素进行累积。
reduce参数说明:
reduce(function, iterable[, initial]) -> valuefunction : 函数,有两个参数 iterable : 可迭代对象 initializer : 可选,初始参数
#使用reduce 函数会对参数序列的元素进行累积from functools import reduce#1.常用场景:计算1-10的和 list1 = [1,2,3,4,5,6,7,8,9,10]
def add(a, b):return a + bx = reduce(add, list1,100)
print(x) #155#2.将列表[1,2,4,6,8]转换为整数12468.将列表中的每一个元素*10再加上后面的一个元素
list2 = [1,2,4,6,8]
def function(a, b):res = a*10 + breturn res
y = reduce(function, list2)
print(y) #12468#3.求累加平均数def sum(acc,val):return (acc[0] + val, acc[1] + 1)lst = [1, 2, 3, 4, 5]
sum, n = reduce(sum,lst, (0, 0))
print(f'累加平均:{sum/n}') #累加平均:3.03.filter函数
函数作用:filter 用来创建一个迭代器,该迭代器从给定可迭代对象中筛选出那些函数为True的元素
filter参数说明:
filter(function,iterable)) function:一个用于测试每个元素是否包含于结果中的函数,该函数接受一个参数返回一个布尔值 iterable:一个可迭代对象,比如说元组,列表,集合或字符串
#1.filter筛选列表中的偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]def is_even(number):return number % 2 == 0
res = filter(is_even, numbers)print(list(res)) #[2, 4, 6, 8, 10]'''
在这个例子中,is_even函数检查数字是否为偶数,而filter()则使用这个数字来筛选numbers
列表中的偶数,结果是一个迭代器,使用list()函数将其转换为列表以便打印
'''2.判断函数是否为空字符串
a = ['A','B',"",None," ","C"]
def not_empty(s):return s and s.strip()
res1 = filter(not_empty, a)
print(list(res1)) #['A', 'B', 'C']
4.sorted函数
函数说明:对函数列表排序并生成一个新列表
排序算法:对序列排序并生成一个新列表 sorted()是python的内置函数,对序列进行排序,返回一个新的列表 sorted(iterable,key,reverse=False ) false 降序,true是升序,默认升序 def sorted(*args, **kwargs)
res = sorted([20,-61,34,99,1])
print(res) #[-61, 1, 20, 34, 99]res1 = sorted([20,-61,34,99,1],key=abs,reverse=False)
print(res1) #[1, 20, 34, -61, 99]5.lambda函数
函数说明:lambda函数本质是匿名函数,常用于在其他高阶函数当中组合使用
#格式:
lambda 参数1,参数2,.... : 表达式
# lambda 参数1,参数2,.... : 表达式 与传统函数定义使用的区别
add = lambda x, y: x + y
print(add(1,2)) #3def sum(num1,num2):return num1 + num2
print(sum(1,2)) #3#lambda函数与sorted函数的组合使用
pairs = [(1,'one'),(2,'two'),(3,'three'),(4,'four'),(5,'five')]
pairs_sorted = sorted(pairs,key=lambda x:x[0],reverse=False)
print(pairs_sorted) #[(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')]#与filter组合使用
#删除 lst = [0.5, 0.8, -0.2, 0.6, -0.7] 中绝对值较大的元素(提示三元+海象+max)
numbers = range(1,11)
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers))#[2, 4, 6, 8, 10]
6.map函数
函数说明:map() 是一个内置函数,用于对可迭代对象(如列表、元组等)中的每个元素应用指定的函数,并返回一个迭代器(map 对象)
map() 适合对可迭代对象的元素批量应用函数,尤其适合配合 lambda 表达式处理简单逻辑。它返回的迭代器可以节省内存(按需生成结果),但需要显式转换为列表或元组才能直接查看内容。
函数:
map(function, iterable, ...)
返回值说明:
一个
map类型的迭代器,需要通过list()、tuple()等方法转换为具体的序列才能直接查看结果。多个可迭代对象一起使用返回元素个数与最短的列表相同,其他不处理#迭代器特性:
map()返回的是迭代器,只能被遍历一次。再次遍历会返回空结果result = map(lambda x: x*2, [1,2,3])
print(list(result)) # [2,4,6]
print(list(result)) # [](已耗尽)
#传统方法使用map函数
def square(x):return x **2nums = [1, 2, 3, 4]
result = map(square, nums) # 返回 map 迭代器
print(list(result)) # 转换为列表:[1, 4, 9, 16]#lambda函数相同功效
nums = [1, 2, 3, 4]
print(list(map(lambda x: x** 2, nums))) # 输出:[1, 4, 9, 16]#多个列表传递元素
a = [1, 2, 3]
b = [4, 5, 6]
# 对 a[i] 和 b[i] 求和
result = map(lambda x, y: x + y, a, b)
print(list(result)) # 输出:[5, 7, 9]#如果长度不同以最短的为例
a = [1, 2, 3, 4] # 长度 4
b = [5, 6] # 长度 2
result = map(lambda x, y: x * y, a, b)
print(list(result)) # 输出:[5, 12](只处理前 2 对)