当前位置: 首页 > article >正文

Python语法基础(四)

🌈个人主页:羽晨同学 

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

高阶函数之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) # 5050

r2=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 True
    else:
        return False
it = filter(func1,list1)
print(list(it))

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

r2=filter(lambda x:x % 2==0,list1)
print(r2)

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


http://www.kler.cn/a/418053.html

相关文章:

  • TiDB 无统计信息时执行计划如何生成
  • 「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历
  • Flutter:页面滚动
  • 理解Java集合的基本用法—Collection:List、Set 和 Queue,Map
  • 202页MES项目需求方案深入解读,学习MES系统设计规划
  • Linux - nfs服务器
  • 多线程安全单例模式的传统解决方案与现代方法
  • 关于线扫相机的使用和注意事项
  • shell脚本练习(2)
  • Java安全—原生反序列化重写方法链条分析触发类
  • C++趣味编程玩转物联网:基于树莓派Pico控制无源蜂鸣器-实现音符与旋律的结合
  • 递归算法讲解(c基础)
  • Docker扩容操作(docker总是空间不足)
  • C#基础之预处理器,异常处理
  • 三维扫描仪-3d扫描建模设备自动检测尺寸
  • Android笔记【10】
  • 【前端开发】JS+Vuew3请求列表数据并分页
  • Spring Boot日志总结
  • 大模型开发和微调工具Llama-Factory-->WebUI
  • 架构05-架构安全性
  • 【设计模式系列】备忘录模式(十九)
  • 腾讯云助力央视总台构建国家级新媒体大数据平台
  • 网络工程师——VPN
  • 基于STM32的传感器数据采集系统设计:Qt、RS485、Modbus Rtu协议(代码示例)
  • redis.conf
  • RNN And CNN通识