Python入门教程14:高阶函数用法解析
Python,速成心法
敲代码,查资料,问度娘
练习,探索,总结,优化
高阶函数higher-order function,它有两个特点:第一,变量可以指向函数,第二,函数名其实就是指向函数的变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称为高阶函数。编写高阶函数,就是让函数的参数能够接收其他函数。
01map的用法
map()是Python中的一个高阶函数,它接受一个函数和一个可迭代对象作为参数,并返回一个新的可迭代对象,其中每个元素都是调用函数并传入可迭代对象的元素的结果。
#例子1:使用map计算列表a,b的相乘值
a=[1,2,3,4]
b=[10,20,30]
def f(x,y):
return x*y
L=map(f,a,b)
print(list(L))
#输出结果[10, 40, 90],可以结果为三个元素,说明最少列表b为标准,做一一对应计算
例子02:高阶函数map将数字转换为字符串
a=10
#将10转换为字符串
s=str(a)
print(type(s))
a=[1,2,3,4,5,6,7,8,9] #将列表中每个元素转换为字符串
L=map(str,a)
print(list(L))
03计算列表里面每个数值的平方
# 一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]
a=[1,2,3,4,5,6,7,8,9]
def f(x):
return x*x
result_list=[]
for i in a:
result_list.append(f(i))
#print(result_list)
#使用map实现
it=map(f,a) #返回的it是一个可迭代的对象
#print(type(it))
print(list(it))
#输出结果[1, 4, 9, 16, 25, 36, 49, 64, 81]
02reduce的用法
reduce是一个Python内置函数,用于对可迭代对象中的元素进行累积操作。它的基本语法如下:
reduce(function, iterable, initializer)
reduce函数的返回值是累积结果。如果function返回None,则累积结果为None;否则,累积结果为function(accumulator, element),其中accumulator是累积器的当前值,element是传入累积器的每个元素。
例子1:计算列表的求和
from functools import reduce
#导入reduce模块
a=[1,2,3,4,5,6,7,8,9,10]
sum=0
for i in a:
sum+=i
print('累加和:',sum)
def sumTest(x,y):
return x+y
sum=reduce(sumTest,a)
print('reduce计算列表求和:',sum) #输出55
03 filter的用法
filter()是Python中的一个高阶函数,可以应用于一个可迭代对象上,过滤掉不需要的元素,返回过滤后的迭代对象。以下是filter()的使用示例代码:
#1.在一个列表中,删掉偶数,保留奇数
def is_odd(n):
# if n%2==0:
# return False
# else:
# return True
return n%2 == 1
L=filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
print(list(L))
#2.一个序列中的空字符串删掉
a=['A', '', 'B', None, 'C', ' ']
def not_empty(s):
return s and s.strip()
L=filter(not_empty,a)
print(list(L))
04 sorted的用法
sorted(): 它可以对可迭代对象进行排序,并返回一个新的已排序的列表。以下是sorted()的使用示例代码:
#1.对数值进行排序
sort_list=sorted([42,422,4,2,-100,3,-10])
print('默认升序排序',sort_list)
#逆序排序,给sorted添加reverse参数
sort_list=sorted([42,422,4,2,-100,3,-10],reverse=True)
print('逆序',sort_list)
#对字符串ASCII A:65 a:97
sort_list=sorted(['abc','ad','ABC','D','d','C'])
print('字符串排序',sort_list)
sort_list=sorted(['abc','ad','ABC','D','d','C'],reverse=True)
print('字符串逆序排序',sort_list)
#sorted是高阶函数,他还可以接收一个key函数来实现自定义的排序
#对数值列表,按绝对值的大小排序
sort_list=sorted([42,422,4,2,-100,3,-10],key=abs)
print('默认升序排序',sort_list)
#对字符串列表,忽略大小写
sort_list=sorted(['abc','ad','ABC','D','d','C'],reverse=True,key=str.lower)
print('字符串逆序排序',sort_list)
06 匿名函数lambda
Lambda 表达式是 Python 中的一种函数式编程语言特性,它可以将一个函数封装在一对括号中,然后作为一个普通的函数来使用。Lambda 表达式通常用于简洁地编写函数,或者用于创建匿名函数。
下面是一些 Lambda 表达式的示例:
#1.定义一个简单的函数,接受两个参数并返回它们的和:
sum = lambda x, y, z: x + y + z
print(sum(2, 3, 5)) # 输出 10
#2.定义一个接受任意数量参数的函数,并返回它们的乘积:
product = lambda *args: args[0] * args[1]* args[2]
print(product(5, 2, 3)) # 输出 6
#3.定义一个返回布尔值的函数,用于判断一个值是否为 True 或 False:
is_even = lambda x: x % 2 == 0
print(is_even(4)) # 输出 True
print(is_even(5)) # 输出 False
#4.使用map()和filter()操作
numbers = [1, 2, 3, 4, 5]
print(list(map(lambda x: x**2, numbers)))
# 定义一个列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 应用`filter()`函数过滤掉不是偶数的元素
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)
# 输出: [2, 4, 6, 8, 10]
07 偏函数的使用
使用functools.partial(original_fuc,param1,param....)在原有函数基础上生成一个偏函数。
偏函数:就是以原函数为基础,将某个位置上的参数固定住(默认是从第一个参数固定),后续参数重新扩展传递给原函数,对外则是生成一个新函数。
print(int('12345')) #将字符串按十进制转换为整数
print('转换为八进制:',int('12345',base=8))
print('转换为十六进制:',int('12345',16))
#将'1010' 按二进制转换为整数
print(int('1010',base=2))
print(int('101010',base=2))
print(int('10101010',base=2))
#定义函数
def new_int(s):
return int(s,base=2)
print(new_int('1010'))
print(new_int('101010'))
print(new_int('10101010'))
from functools import partial
new_int=partial(int,base=2)
print(new_int('1010'))
print(new_int('101010'))
print(new_int('10101010'))
完毕!!感谢您的收看
------------往期更多精彩内容------------
-------------------------------------------------
---------------Python源码集合---------------
Python源代码分享:05使用turtle模块绘制一个彩色螺旋图案