Python武器库开发-高级特性篇(八)

news2024/11/15 5:38:45

高级特性篇(八)

高阶函数

Python作为一门高级编程语言,拥有着强大的函数式编程能力。其中高阶函数就是Python函数式编程的重要组成部分。在Python中,函数可以被当作变量一样进行操作,包括作为参数传递给其他函数,或者作为返回值从函数中返回。这种能够处理函数的函数就被称为高阶函数。简而言之,高阶函数就是能够接受函数作为参数或者返回函数的函数。

在Python中,函数被称为一等公民(first-class citizens),这意味着函数可以像其他数据类型一样进行操作,例如可以赋值给变量、作为参数传递、作为返回值返回等。这种特性使得Python中的函数可以非常灵活地被用于各种不同的场景。高阶函数是指接收函数作为参数或者返回值是一个函数的函数,是Python函数式编程的重要手段之一。

在函数式编程中,函数是一等公民,可以作为变量、参数、返回值等使用。下面我们将分别介绍Python高阶函数中的四个经典应用:filter、reduce、sorted、map,并结合实际案例进行详细讲解:

filter函数是Python中常用的高级函数之一,其作用是从一个序列中过滤出符合条件的元素,将结果以一个filter类型返回。

下面我们来看一下filter函数的案例:

# 过滤列表中的偶数
def is_even(n):
    return n % 2 == 0

num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = list(filter(is_even, num_list))
print(new_list)

这个例子中,我们定义了一个is_even函数用于判断一个数是否为偶数。然后我们用filter函数对num_list中的元素依次进行判断,将所有偶数提取出来,最终得到一个新的列表new_list:

在这里插入图片描述

reduce函数是Python中另一个常用的高级函数,其作用是对一个序列进行归约操作,将其简化为一个数。reduce函数会将归约函数function递归作用于序列sequence的每个元素,将结果与下一个元素一起作为function的输入,最终仅得到一个结果值。如果指定了initial,则将该值与序列的第一个元素一起进行归约操作。

下面我们来看一个reduce函数的实例:

# 计算列表中数字的和

from functools import reduce

def add(x,y):
    return x + y

num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = reduce(add, num_list)
print(result)

这个例子中,我们定义了一个add函数用于求和。然后我们用reduce函数对num_list中的元素依次进行求和,得到最终的结果。其中,reduce函数会将add函数用于num_list中的前两个元素,然后将结果与第三个元素合并,一直递归下去,直到得到最终的结果:

在这里插入图片描述

sorted函数是Python中常用的高级函数之一,其作用是对一个集合进行排序,返回一个新的排序后的集合。sorted函数会返回一个新的集合,该集合是iterable排序后的结果。下面我们来看一个Sorted函数的实例:

# 对列表中的数字进行排序

num_list = [5, 2, 3, 1, 4]
result = sorted(num_list)
print(result)

这个例子中,我们使用sorted函数对num_list进行排序。sorted函数会将num_list排序后生成一个新的列表,并将其赋值给result变量:

在这里插入图片描述

map函数是Python中常用的高级函数之一,其作用是对一个序列中的每个元素进行函数操作,返回一个新的序列。map函数会对序列中的每个元素依次调用function函数,返回一个新的序列。下面我们来看一个map函数的实例:

# 对列表中的数字求平方

def square(n):
    return n ** 2

num_list = [1, 2, 3, 4, 5]
new_list = list(map(square, num_list))
print(new_list)

这个例子中,我们定义了一个square函数用于对数字求平方。然后我们用map函数对num_list中的元素依次进行求平方,并组成一个新的列表new_list:

在这里插入图片描述

匿名函数

在Python中,匿名函数是没有定义名称的函数。虽然def在Python中使用关键字定义了普通函数,但使用关键字定义了匿名函数lambda。因此,匿名函数也称为lambda函数。

python中的lambda函数具有以下语法:

lambda arguments: expression

Lambda函数可以具有任意数量的参数,但只能有一个表达式。表达式被求值并返回。Lambda函数可在需要函数对象的任何地方使用。

这是一个使输入值翻倍的lambda函数示例:

# 程序展示lambda函数的使用
double = lambda x: x * 2

print(double(5))

以上实例输出的结果:

在这里插入图片描述

在上面的程序中,lambda x: x * 2是lambda函数。这里x是参数,x * 2是求值和返回的表达式。

这个函数没有名字。它返回一个函数对象,该对象被分配给标识符double。我们现在可以把它叫做普通函数。下面声明

double = lambda x: x * 2

就等同于

def double(x):
   return x * 2

当我们临时需要匿名函数时,我们使用lambda函数。在Python中,我们通常将其用作高阶函数的参数(该函数将其他函数作为arguments)。Lambda函数可以与filter(),map()等内置函数一起使用。在Python函数中filter()接受一个函数和一个列表作为参数。使用列表中的所有项调用该函数,并返回一个新列表,其中包含函数计算结果为True的项。这是使用filter()函数从列表中仅滤除偶数的示例。

lambda与filter()一起使用的示例:

# 程序从列表中过滤出偶数项
my_list = [1, 5, 4, 6, 8, 11, 3, 12]

new_list = list(filter(lambda x: (x%2 == 0) , my_list))

print(new_list)

以上代码的输出:

在这里插入图片描述

在Python中的map()函数接受一个函数和一个列表。

使用列表中的所有项调用该函数,并返回一个新列表,其中包含该函数为每个项返回的项。

这是使用map()函数将列表中所有项目翻倍的示例:

# 使用map()将列表中的每个项加倍

my_list = [1, 5, 4, 6, 8, 11, 3, 12]

new_list = list(map(lambda x: x * 2 , my_list))

print(new_list)

以上代码的输出:

在这里插入图片描述

偏函数

偏函数(Partial function)是Python的functools模块提供的一个很有用的功能。简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

举个例子,int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:

print(int('12345'))

以上代码输出的实例:

在这里插入图片描述

但int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做N进制的转换:

print(int('12345', base=8))
print(int('12345', 16))

以上代码输出的实例:

在这里插入图片描述

假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:

def int2(x, base=2):
    return int(x, base)

print(int2('1000000'))
print(int2('1010101'))

这样,我们转换二进制就非常方便了:

在这里插入图片描述

functools.partial可以帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

import functools
int2 = functools.partial(int, base=2)
print(int2('1000000'))
print(int2('1010101'))

以上代码输出的实例:

在这里插入图片描述

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

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

相关文章

DBSCAN算法c++实现

首先计算出距离每个点e以内的点&#xff0c;如果个数>minPts,则找出它的直接密度可达和间接可达的点&#xff0c;用visited标记点是否已经在簇中&#xff0c;循环直到最后一个点。 #include <fstream> #include <vector> #include <iostream> #include &…

Leetcode.树形DP

目录 543.二叉树的直径 124.二叉树中的最大路径和 2246.相邻字符不同的最长路径 543.二叉树的直径 用递归来写 考虑 树形DP 维护以当前节点为根节点的最大值&#xff0c;同时返回给父节点经过当前节点的最大链的长度&#xff0c;这有个trick 当遍历到空节点的时候返回-1 递归…

mq消费并发排队及幂等机制实现

一&#xff0c;解决什么问题及实现方案 主要为了解决并发访问排队执行及重复下发保证幂等的问题 实现技术方案 如何实现并发访问时&#xff0c;请求排队执行方法。Redssion 如何实现MQ重复下发时&#xff0c;保证幂等。redis 先插入一个分布式锁的话题&#xff0c;如下&am…

LeetCode 740.删除并获得点数---->打家劫舍

前言&#xff1a;简单写写自己对这道题的拙见&#xff0c;如有意见或者建议可以联系笔者owo 首先&#xff0c;看看完整题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获…

归并排序(java)

大家好我是苏麟 , 今天说说归并排序 . 归并排序 递归 正式学习归并排序之前&#xff0c;我们得先学习一下递归算法。 定义&#xff1a; 定义方法时&#xff0c;在方法内部调用方法本身&#xff0c;称之为递归. public void show(){System.out.println("aaaa")…

SEACALL海外呼叫中心系统的优势包括

SEACALL海外呼叫中心系统的优势包括 封卡封号问题解决 海外呼叫中心系统通过API开放平台能力&#xff0c;定制电话营销系统&#xff0c;提供多项功能如自动拨打、智能应答、真人语音交互等&#xff0c;帮助企业克服员工离职率高、客户资源流失严重等挑战。 - 高级管理者操控 …

《实现领域驱动设计》

DDD入门 1.1 DDD是什么&#xff1f; DDD是一种软件开发方法 DDD将领域专家和开发人员聚集到一起&#xff0c;开发的软件能够反映出领域专家的思维模型。目标是&#xff1a;交付最具业务价值的软件。DDD关注业务战略&#xff1a;指引我们如何实现面向服务架构&#xff08;ser…

开题报告怎么写?-案例+模板保姆级)

以前导师让们带本科生开题报告&#xff0c;我深知开题报告在学术研究中的重要性。一个出色的开题报告能够展示学生的科学思维、研究能力和创新潜力。 在本篇博客中&#xff0c;我将为大家详细介绍如何撰写史上最强开题报告。 将从课题的 科学意义国内外研究概况和发展趋势应…

SourceTree 使用

如何拉取远程仓库&#xff1f;如何拉去远程分支&#xff1f;如何创建本地分支&#xff1f;如何删除本地分支&#xff1f;如何删除远端分支&#xff1f; 删除了远程分支&#xff0c;如果本地还有此分支&#xff0c;那么是可以通过推送本地分支来还原远端分支。如何合并本地分支&…

2023中国计算机大会:蚂蚁集团连发两支百万级科研基金

10月26日&#xff0c;中国计算机学会&#xff08;CCF&#xff09;主办的第二十届中国计算机大会(CNCC2023)在沈阳举行。在“CCF-蚂蚁科研基金及产学研合作交流活动”上&#xff0c;蚂蚁集团发布了2023年度“CCF-蚂蚁科研基金”绿色计算及隐私计算两支百万级专项基金&#xff0c…

动态代理IP怎么设置?动态代理IP有哪些应用场景?

动态代理IP是指代理服务器会根据实际IP地址的变化而变化&#xff0c;可以帮助用户隐藏真实的IP地址&#xff0c;同时可以在不同的网络环境下使用不同的代理IP地址。下面是动态代理IP的设置和应用场景&#xff1a; 一、动态代理IP怎么设置&#xff1f; 1. 手动设置代理IP地址 用…

基于Arduino的物流分拣控制系统设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、控制系统设计1.1系统方案1.2 系统工作原理1.3方案设计1.3.1快递检测电路方案设计1.3.2控制电路方案设计 二、硬件…

【Java基础】File类与IO流

File类与IO流 文章目录 File类与IO流1. java.io.File类的使用1.1 概述1.2 构造器1.3 作用 2. IO流原理及流的分类2.1 流的分类2.3 流的API 3. 节点流之一&#xff1a;FileReader\FileWriter3.1 Reader与Writer3.3 关于flush&#xff08;刷新&#xff09; 4. 节点流之二&#xf…

GPIO常见名词——推挽、开漏、浮空、上拉、下拉、高阻态

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 1、前言…

VTK OrientationMarker 方向 三维坐标系 相机坐标轴 自定义坐标轴

本文 以 Python 语言开发 我们在做三维软件开发时&#xff0c;经常会用到相机坐标轴&#xff0c;来指示当前空间位置&#xff1b; 坐标轴效果&#xff1a; 相机方向坐标轴 Cube 正方体坐标轴 自定义坐标轴&#xff1a; Code&#xff1a; Axes def main():colors vtkNamedC…

以太网通讯与485通讯哪个好?

随着工业自动化、物联网和信息技术的快速发展&#xff0c;数据传输成为了各个领域越来越关注的问题。在众多通讯技术中&#xff0c;以太网通讯和485通讯被广泛应用于各种场景。那么&#xff0c;这两种通讯技术究竟哪个更好呢&#xff1f;接下来&#xff0c;小编就来为大家一一讲…

使用Terraform管理已经存在的kubernates和默认的节点池

背景&#xff1a; 通过terraform resource "alicloud_cs_managed_kubernetes" "k8s" {...}创建集群时&#xff0c;会产生一个默认的节点池default-nodepool&#xff0c;但是如何去修改这个默认节点池的信息呢&#xff1f; 解决思路&#xff1a; 因为Ter…

LLM系列-大模型技术汇总

LLM系列-大模型技术汇总 1. 大模型技术汇总-参数高效迁移学习方法2. 千亿模型并行训练技术2.1. 数据并行&#xff08;Data Parallelism&#xff0c;DP&#xff09;2.2. 模型并行&#xff08;Model Parallelism&#xff0c;MP&#xff09;2.2.1. 流水线并行&#xff08;Pipeline…

Ubuntu16.04 python matplotlib 输出轴标签出现中文乱码

问题&#xff1a;坐标轴打印中文时&#xff0c;显示会乱码 import matplotlib.pyplot as plt plt.ylabel(时间刻度)原因&#xff1a;matplotlib里面没有中文字体解决方法&#xff1a;下载SimHei字体&#xff0c;快捷方法是使用everything直接在windows搜索simhei.ttf&#xff…

【0230】PG内核底层事务(transaction)实现原理之基础篇

1. 事务上层 事务是如何工作? 接下来让我们通过gdb方式来跟踪一下PG内核中事务的底层工作原理。 (1)psql登录PG服务(2)psql登录界面输入:begin(3)gdb跟踪backend进程读取用户的输入,并进入exec_simple_query()函数函数exec_simple_query()的实现如下: static void …