Python基础篇(07):高阶函数lambda、zip、map、filter、reduce和函数注解

一、匿名函数 lambda 表达式

1、格式  

lambda 参数: 表达式

  • 冒号前是参数,可以有多个,用逗号隔开
  • 冒号右边的为表达式
  • 返回值是一个函数对象

2、举例:一个最简单的lambda函数

add = lambda x, y: x + y
print(type(add))  # <class 'function'>
print(add(3, 5))  # 8

3、与sorted()函数结合使用

1. 首先介绍下sort()sorted()的区别

  1. sort() 是 list 的方法,只有 list 能用,而sorted() 是内置函数,可以对所有可迭代的对象进行排序操作
  2. list 的 sort() 是原地排序,会改变原来列表的顺序,无返回值;而内置函数 sorted()不会改变原来列表的顺序,返回一个新的 list

2. sorted()函数的用法

语法:sorted(iterable, key=None, reverse=False)
参数:
iterable – 可迭代对象。例如:列表或字典
key      – 对可迭代对象中给定元素的每一项进行排序。只有一个参数,具体的函数参数取自于可迭代对象
reverse  – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

3. sort()和sorted()的使用示例

# sort() 的使用示例
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5]
lst.sort()
print(lst)  # 输出:[1, 1, 2, 3, 4, 5, 5, 6, 9]# sorted() 的使用示例
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5]
new_lst = sorted(lst)
print(new_lst)  # 输出:[1, 1, 2, 3, 4, 5, 5, 6, 9]
print(lst)  # 输出:[3, 1, 4, 1, 5, 9, 2, 6, 5]

4. lambda 函数结合 sorted() 方法排序的经典例子

list1 = [5, -3, 1, 8, -4]
list2 = sorted(list1, key=lambda x: abs(x))  # 对 list1 中的每个元素取绝对值进行排序
print(list2)  # 输出:[1, -3, -4, 5, 8]

 二、zip 函数

1、举例:一个最简单的zip函数

l1 = [1, 2, 3]
l2 = ['x', 'y']
print(zip(l1, l2))  # <zip object at 0x00000000023FED00>
print(list(zip(l1, l2)))  # [(1, 'x'), (2, 'y')]
print(dict(zip(l1, l2)))  # {1: 'x', 2: 'y'}
  • python 3中 zip 方法合并列表后生成的是 zip 对象
  • 使用 list 方法可以将其变成元组对列表(元组对的数量以合并列表的最短长度为准)
  • 使用 dict 方法可以将其变成字典(长度以合并列表的最短长度为准)

2、实际上 zip 方法支持所有可迭代对象(字符串、列表、元祖、字典),而不仅仅是列表。利用这个特性,可以很容易创建各种字典。

ls1 = [1, 2, 3]
str1 = "abc"
print(dict(zip(ls1, str1)))  # 输出:{1: 'a', 2: 'b', 3: 'c'}name = ["John", "Jim", "Lucy"]
year = [1983, 1985, 1995]
for name, year in zip(name, year):print("%s - %s" % (name, year))
"""
输出:
John - 1983
Jim - 1985
Lucy - 1995
"""

三、map 函数

1、说明

map 函数会根据传入的函数对指定序列做映射

2、语法

map(function, iterable, ...)
参数描述
function需要传入的函数,可以是内置函数,也可以是自定义函数,或者匿名函数
iterable可迭代对象,如 列表字符串元祖字典 等等

3、返回值

返回的是一个 map 对象,注意不是列表不能直接输出,可以通过 for 循环 或者 list() 来显示。

4、举例:通过 map 函数实现求传入的 list 的每个元素的绝对值

l1 = [1, -2, -3]
map_abs = map(abs, l1)
print(list(map_abs))   # [1, 2, 3]
for val in map_abs:print(val)         # 映射完没内容输出

四、filter 函数

1、说明

filter 函数会根据传入的函数对指定序列做过滤

2、语法

filter(function, iterable)
参数描述
function需要传入的函数,可以是内置函数,也可以是自定义函数,或者匿名函数
iterable可迭代对象,如 列表字符串元祖字典 等等

3、返回值

返回的是一个 filter 对象,注意不是列表不能直接输出,可以通过 for 循环 或者 list() 来显示

4、举例:通过 filter 函数上实现求传入的 list 的偶数元素的功能

def is_even(num):return num % 2 == 0filter_even = filter(is_even, [2, 5, 6])
for val in filter_even:print(val)  # 2 6

五、reduce 函数

1、说明

  1. reduce() 函数是对传入的 参数 序列中的每一个元素进行累积操作
  2. Python3 中,reduce 函数使用之前需要使用 from functools import reduce 语句导入包

2、语法

reduce(function, iterable[, initializer])
参数描述
function需要传入的函数,可以是内置函数,也可以是自定义函数,或者匿名函数
iterable可迭代对象,如 列表字符串元祖字典 等等
initializer可选参数,初始参数。

3、返回值

对 iterable 里的每个元素做累积处理,处理完毕后返回。

4、举例:使用reduce 函数求所有元素的乘积

from functools import reducereduce_res = reduce(lambda x, y: x * y, [1, 2, 3, 4])
print(reduce_res)  # 24

六、Python函数注解

1、说明

函数注解是Python 3.5 引入的,目的是提供一个标准方法来注释函数的参数和返回值

2、语法

def func(param1:param1 note, param2:param2 note=default val)->return val note:pass
参数描述
param1形参1。
param1 note形参1 的注解。
param2形参2。
param2 note形参2 的注解。
default val形参2的默认值。
val note返回值的注解。

3、获取函数注解信息语法

print(func_name.__annotations__)
参数描述说明
func_name需要获取注解信息的函数。可以获取函数名为 func_name 的注解信息

4、举例:通过圆半径计算圆周长

# 通过圆半径计算圆周长
def circle(r: "圆的半径") -> "返回圆的周长":return 2 * 3.14 * rres = circle(10)
print("圆的周长是:{}".format(res))
print(circle.__annotations__)
"""
输出:
圆的周长是:62.800000000000004
{'r': '圆的半径', 'return': '返回圆的周长'}
"""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/74413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 22.04 安装 Docker Engine

Install Docker Engine on Ubuntu | Docker Docs 比较方便的安装方式为通过 Apt Repo 来安装&#xff0c;需要三大步&#xff1a; 1. 预备仓库信息&#xff1a; 逐行执行一下命令 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificat…

R语言---使用runway进行机器学习模型性能的比较

R语言—使用runway进行机器学习模型性能的比较 #dataloadrm(list=ls())#librarylibrary(dcurves)library(gtsummary)library(tidyverse)library(mlr3verse)library(tidyverse)library(data.table)</

【鲁棒电力系统状态估计】基于投影统计的电力系统状态估计的鲁棒GM估计器(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

SpringCloud Alibaba 入门到精通 - Nacos

SpringCloud Alibaba 常用组件 一、基础结构搭建1.父工程创建2.子工程创建 二、Nacos&#xff1a;注册中心1.服务端搭建2.注册中心-客户端搭建3.注册中心-管理页面4.注册中心-常用配置5.注册中心-核心功能总结 三、Nacos注册中心集成Load Balancer 、OpenFeign1.Nacos客户端集成…

一键部署k8s集群

前置动作 关闭防火墙 systemctl disable firewalld && systemctl stop firewalld 关闭SELinux sed -i s#SELINUXenforcing#SELINUXdisabled#g /etc/selinux/config && grep SELINUXdisabled /etc/selinux/config setenforce 0 getenforce 关闭swap # 关闭…

前端面试题JS篇(4)

浏览器缓存 浏览器缓存分为强缓存和协商缓存&#xff0c;当客户端请求某个资源时&#xff0c;获取缓存的流程如下&#xff1a; 先根据这个资源的一些 http header 判断它是否命中强缓存&#xff0c;如果命中&#xff0c;则直接从本地获取缓存资源&#xff0c;不会发请求到服务…

c语言练习44:深入理解strstr

深入理解strstr strstr作用展示&#xff1a; #include <stdio.h> #include <string.h> int main() {char str[] "This is a simple string";char* pch;pch strstr(str, "simple");/*strncpy(pch, "sample", 6);*/printf("%s…

Android逆向学习(一)vscode进行android逆向修改并重新打包

Android逆向学习&#xff08;一&#xff09;vscode进行android逆向修改并重新打包 写在前面 其实我不知道这个文章能不能写下去&#xff0c;其实我已经开了很多坑但是都没填上&#xff0c;现在专利也发出去了&#xff0c;就开始填坑了&#xff0c;本坑的主要内容是关于androi…

Scrum认证高级Scrum Master (A-CSM) 认证培训课程

课程简介 高级ScrumMaster (Advanced Certified ScrumMaster, A-CSM) 认证课程是国际Scrum联盟推出的进阶级Scrum认证课程&#xff0c;是Scrum Master通往专业级敏捷教练必经的学习路径。 在ScrumMaster&#xff08;CSM&#xff09;认证课程中&#xff0c;您学习到了Scrum的价…

Centos 6.5 升级到Centos7指导手册

一、背景 某业务系统因建设较早&#xff0c;使用的OS比较过时&#xff0c;还是centos6.5的系统&#xff0c;因国产化需要&#xff0c;需将该系统升级到BClinux 8.6&#xff0c;但官方显示不支持centos 6.x升级到8&#xff0c;需先将centos6.5升级到centos7的最新版&#xff0c…

50道基础数据结构面试题

程序员必备的50道数据结构和算法面试题 在本文中&#xff0c;将分享一些常见的编程面试问题&#xff0c;这些问题来自于不同经验水平的程序员&#xff0c;囊括从刚大学毕业的人到具有一到两年经验的程序员。 编码面试主要包括数据结构和基于算法的问题&#xff0c;以及一些诸…

华为OD机试 - 战场索敌 - 深度优先搜索dfs算法(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、深度优先搜索dfs五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明4、如果增加目标敌人数量K为55、来&#xff0c;上强度 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 有一个大小是N*M…

【postgresql 基础入门】从了解数据库访问权限,访问数据库,到认识数据库的所有者及属性,从此打开了数据库使用的大门

数据库操作 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君…

RNA 36. SCI 文基于转录组数据识别CNV并可视化 (CaSpER)

转录组生信分析教程 桓峰基因公众号推出转录组分析教程&#xff0c;有需要生信的老师可以联系我们&#xff01;转录分析教程整理如下&#xff1a; RNA 1. 基因表达那些事--基于 GEO RNA 2. SCI文章中基于GEO的差异表达基因之 limma RNA 3. SCI 文章中基于T CGA 差异表达基因之 …

python28种极坐标绘图函数总结

文章目录 基础图误差线等高线polar场图polar统计图非结构坐标图 &#x1f4ca;python35种绘图函数总结&#xff0c;3D、统计、流场&#xff0c;实用性拉满 matplotlib中的画图函数&#xff0c;大部分情况下只要声明坐标映射是polar&#xff0c;就都可以画出对应的极坐标图。但…

qt多个信号如何关联一并处理

主要方法&#xff1a; 首先&#xff0c;需要创建一个包含自定义信号和槽的Qt类。假设要创建一个名为MyObject的类&#xff0c;并在其中定义一个自定义信号和一个槽。这个类的头文件可能如下所示&#xff1a; #ifndef MYOBJECT_H #define MYOBJECT_H#include <QObject>c…

基于SSM的校园美食交流系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

2023-9-10 集合-Nim游戏

题目链接&#xff1a;集合-Nim游戏 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_set>using namespace std;const int N 110, M 10010;int n, m; int s[N], f[M];int sg(int x) {if(f[x] ! -1) return f[x];//…

【补】代码随想录算法训练营day38|动态规划 |509. 斐波那契数|70. 爬楼梯|746. 使用最小花费爬楼梯

动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c;贪心没有状态推…

【初阶C语言】操作符1--对二进制的操作

前言&#xff1a;本节内容介绍的操作符&#xff0c;操作的对象是二进制位。所以前面先介绍整数的二进制位 一、二进制位介绍 1.二进制介绍 &#xff08;1&#xff09;整数的二进制表示形式有三种&#xff1a;原码、反码和补码。 &#xff08;2&#xff09;原码、反码和补码的…