🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
高阶函数之map
高阶函数就是说,A函数作为B函数的参数,B函数就是高阶函数
map:映射
map(func,iterable)
这个是map的基本语法,它的返回值是一个iterator,返回一个容器和迭代器。
我们来看下面的这一段代码
list1 =[n**2 for n in range(1,6)]
print(list1)
在这段代码中,我们将生成的元素放入了列表当中,然后我们打印这个列表。
这个是这个代码执行出来的结果。
此时,若我们不放在list当中,而是存放到一个变量当中,然后打印这个变量,我们来看看打印出来的是什么?
r1=(n**2 for n in range(1,6))
print(r1) # <generator object <genexpr> at 0x000002548E2998A0>
这个时候的r1,就是一个生成器
如果我们还想要访问这个生成器当中的元素,我们需要再放入列表当中。
print(list(r1))
然后,我们执行代码。
我们可以看到,里面的值被打印了出来。
而对应的,我们定义一个函数。
def func1(x):return x**2
rl1 = map(func1,range(1,6))
print(rl1) # <map object at 0x00000178A7BEAC50>
这个时候打印出来的值为:# <map object at 0x00000178A7BEAC50>
如果我们想要得到里面的数字,我们就需要将它也放到列表当中去。
print(list(rl1))
我们除了定义这个函数,我们也可以采用匿名函数的方式。
# 匿名函数
rl2=map(lambda x:x**2,range(1,6))
print(rl2)
如果我们想要传入多个参数呢?我们应该怎么进行操作。
# 2.
def func2(a,b):print(a,b)return a+b
r21 = map(func2,[1,2,3],[4,5,6])
这个是我们对应的执行结果。
若是我们将这个换成匿名函数,则应该写成下面这样子。
r22=map(lambda a,b:a+b,[1,2,3],[4,5,6])
print(list(r22))
map中的func函数需要设置几个参数,取决于有几个iterable参与运算
map的工作原理是将多个iterable想用位置的元素同时传参给func
高阶函数之reduced
语法:
reduced(func,sex)
sex一般是有序的序列
首先将sex中的第0个元素和第一个元素传递给func,进行运算,返回结果1,接着,将结果1和第二个元素传递给func,进行运算,返回结果2,直到所有的元素都参与了运算,表示运算结束。
需要注意的有下面几点:
- func函数需要设置至少两个参数
- 表示数量的减少
- 区别于map,reduced在使用之前一定要先导入
导入模块如下:
import functools
functools.reduce()
我们接下来做个例子:
求1-100之间所有整数的和
r1 = functools.reduce(func1,range(1,101))
print(r1) # 5050r2=functools.reduce(lambda x,y:x+y,range(1,101))
print(r2)
这样子的话,我们就可以完美的实现这个功能。
高阶函数之sorted
我们之前学过在python中利用sort进行排序,我们来举一个例子:
list1=[34,637,234,2,6,89]
list1.sort()
print(list1)
利用这个代码,我们就可以实现列表从低到高的排序。
那么,利用sorted,我们也可以这样,我们来看下面的这一段代码
list1=[34,637,234,2,6,89]
list2=sorted(list1,reverse=False)
print(list1)
print(list2)
你看,这个代码,我们也完美实现了我们想要的功能,那么,这两个有什么区别呢?
其实你看我们的代码也可以看出来,当使用sorted的时候,我们可以将排序好的赋值到一个新的变量中,而原来变量中值并不会发生改变。
高阶函数之fliter()
语法:
高阶函数之filter()
filter(func,iterable): 过滤func:函数itearble:可迭代对象
这个函数的作用是将iterable中的元素依次传递给func,根据func的返回值来决定是否保留这个元素,如果返回值是True,那么就保留,反之,就不保留。
我们来看一个例子:
# 1. 已知列表list1 =[34,56,23,34,7,8,19,45,7,9,10,46,7979] 跳出其中的偶数
list1 =[34,56,23,34,7,8,19,45,7,9,10,46,7979]
def func1(x):if x %2==0:return Trueelse:return False
it = filter(func1,list1)
print(list(it))
我们也可以使用匿名函数来实现这个功能:
r2=filter(lambda x:x % 2==0,list1)
print(r2)
好了,我们这篇文章的内容就到这里,我们下次再见。