Python语法基础(四)

🌈个人主页:羽晨同学

💫个人格言:"成为自己未来的主人~"

高阶函数之map

高阶函数就是说,A函数作为B函数的参数,B函数就是高阶函数

map:映射

python 复制代码
map(func,iterable)

这个是map的基本语法,它的返回值是一个iterator,返回一个容器和迭代器。

我们来看下面的这一段代码

python 复制代码
list1 =[n**2 for n in range(1,6)]
print(list1)

在这段代码中,我们将生成的元素放入了列表当中,然后我们打印这个列表。

这个是这个代码执行出来的结果。

此时,若我们不放在list当中,而是存放到一个变量当中,然后打印这个变量,我们来看看打印出来的是什么?

python 复制代码
r1=(n**2 for n in range(1,6))
print(r1) # <generator object <genexpr> at 0x000002548E2998A0>

这个时候的r1,就是一个生成器

如果我们还想要访问这个生成器当中的元素,我们需要再放入列表当中。

python 复制代码
print(list(r1))

然后,我们执行代码。

我们可以看到,里面的值被打印了出来。

而对应的,我们定义一个函数。

python 复制代码
def func1(x):
    return x**2
rl1 = map(func1,range(1,6))
print(rl1) # <map object at 0x00000178A7BEAC50>

这个时候打印出来的值为:# <map object at 0x00000178A7BEAC50>

如果我们想要得到里面的数字,我们就需要将它也放到列表当中去。

python 复制代码
print(list(rl1))

我们除了定义这个函数,我们也可以采用匿名函数的方式。

python 复制代码
# 匿名函数
rl2=map(lambda x:x**2,range(1,6))
print(rl2)

如果我们想要传入多个参数呢?我们应该怎么进行操作。

python 复制代码
# 2.
def func2(a,b):
    print(a,b)
    return a+b
r21 = map(func2,[1,2,3],[4,5,6])

这个是我们对应的执行结果。

若是我们将这个换成匿名函数,则应该写成下面这样子。

python 复制代码
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在使用之前一定要先导入

导入模块如下:

python 复制代码
import functools
functools.reduce()

我们接下来做个例子:

求1-100之间所有整数的和

python 复制代码
r1 = functools.reduce(func1,range(1,101))
print(r1) # 5050

r2=functools.reduce(lambda x,y:x+y,range(1,101))
print(r2)

这样子的话,我们就可以完美的实现这个功能。

高阶函数之sorted

我们之前学过在python中利用sort进行排序,我们来举一个例子:

python 复制代码
list1=[34,637,234,2,6,89]
list1.sort()
print(list1)

利用这个代码,我们就可以实现列表从低到高的排序。

那么,利用sorted,我们也可以这样,我们来看下面的这一段代码

python 复制代码
list1=[34,637,234,2,6,89]
list2=sorted(list1,reverse=False)
print(list1)
print(list2)

你看,这个代码,我们也完美实现了我们想要的功能,那么,这两个有什么区别呢?

其实你看我们的代码也可以看出来,当使用sorted的时候,我们可以将排序好的赋值到一个新的变量中,而原来变量中值并不会发生改变。

高阶函数之fliter()

语法:

python 复制代码
高阶函数之filter()
filter(func,iterable): 过滤
    func:函数
    itearble:可迭代对象

这个函数的作用是将iterable中的元素依次传递给func,根据func的返回值来决定是否保留这个元素,如果返回值是True,那么就保留,反之,就不保留。

我们来看一个例子:

python 复制代码
# 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 True
    else:
        return False
it = filter(func1,list1)
print(list(it))

我们也可以使用匿名函数来实现这个功能:

python 复制代码
r2=filter(lambda x:x % 2==0,list1)
print(r2)

好了,我们这篇文章的内容就到这里,我们下次再见。

相关推荐
Eiceblue17 分钟前
Python在Excel工作表中创建数据透视表
开发语言·python·visualstudio·excel
2401_8582861136 分钟前
124.【C语言】数据结构之快速排序的小区间优化和非递归的解决方法
c语言·开发语言·数据结构·算法·排序算法·
Spcarrydoinb41 分钟前
python学习笔记—17—数据容器之字符串
笔记·python·学习
编程小筑41 分钟前
TypeScript语言的网络编程
开发语言·后端·golang
老大白菜43 分钟前
第6章:Go语言并发编程
开发语言·后端·golang
KeyPan1 小时前
【机器学习:十三、PyTorch简介及实现】
人工智能·pytorch·python·深度学习·神经网络·机器学习·计算机视觉
黑果果的思考1 小时前
C++例程:使用I/O模拟IIC接口(6)
开发语言·c++
西猫雷婶1 小时前
python学opencv|读取图像(三十)使用cv2.getAffineTransform()函数倾斜拉伸图像
开发语言·python·opencv
编程|诗人1 小时前
Erlang语言的学习路线
开发语言·后端·golang
weixin_466202781 小时前
第37周:咖啡豆识别 (Tensorflow实战第七周)
人工智能·python·tensorflow