python中函数的用法总结(二阶段)
话接上回,继续讲下函数的用法
10. 函数的注解(Function Annotations)
Python 3 引入了函数注解,允许你在函数定义时给参数和返回值添加注解。注解并不影响函数的实际行为,它们更多地用于代码的可读性、文档生成以及静态分析工具。
示例:函数参数和返回值注解
def add(x: int, y: int) -> int:return x + yprint(add(3, 4)) # 输出 7
在这个示例中,x: int
和 y: int
表示参数 x
和 y
预期是整数类型,-> int
表示该函数的返回值预期是一个整数类型。
注解也可以使用其他数据类型,如 str
、float
、List
、Dict
等。你可以使用 typing
模块中的类型提示进行更复杂的注解。
示例:更复杂的注解
from typing import List, Dictdef process_data(data: List[int]) -> Dict[str, int]:return {"sum": sum(data), "count": len(data)}result = process_data([1, 2, 3, 4])
print(result) # 输出 {'sum': 10, 'count': 4}
11. 函数与闭包(Closures)
闭包是指一个函数在其定义时捕获了外部作用域中的变量。闭包使得一个函数可以“记住”并访问其外部函数的变量,即使外部函数已经返回。
示例:闭包
def outer(x):def inner(y):return x + yreturn innerclosure = outer(10) # 闭包,x 被“记住”
print(closure(5)) # 输出 15
在这个例子中,inner
函数是一个闭包,因为它使用了 outer
函数的参数 x
,即使 outer
已经返回,inner
仍然可以访问 x
。
12. Python 的内置函数
Python 提供了大量的内置函数,可以简化很多常见操作。以下是一些常见的内置函数:
len()
:返回对象(如字符串、列表、字典等)的长度。max()
、min()
:返回序列中的最大值和最小值。sum()
:返回序列中所有元素的和。sorted()
:返回一个排序后的序列副本。all()
:如果所有元素都为真,返回True
,否则返回False
。any()
:如果任何一个元素为真,返回True
,否则返回False
。zip()
:将多个可迭代对象打包成一个元组。map()
:将指定函数应用于可迭代对象的每个元素。filter()
:过滤掉不符合条件的元素。
示例:内置函数 map()
和 filter()
numbers = [1, 2, 3, 4, 5]# 使用 map() 将每个数字乘以 2
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # 输出 [2, 4, 6, 8, 10]# 使用 filter() 过滤出偶数
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # 输出 [2, 4]
13. 函数的调用栈和递归深度
在 Python 中,函数的调用是通过“调用栈”(Call Stack)来管理的。每次调用一个函数时,Python 会将该函数的执行信息压入栈中,直到该函数执行完成并返回结果时,栈中的信息才会被移除。
对于递归函数,如果递归调用的深度过大,可能会导致栈溢出(RecursionError
)。你可以通过设置 sys.setrecursionlimit()
来调整递归的最大深度(但不推荐用于生产环境,因为这可能会影响程序的稳定性)。
示例:递归深度限制
import sys
sys.setrecursionlimit(2000) # 设置递归深度为 2000def factorial(n):if n == 0:return 1return n * factorial(n - 1)print(factorial(1000)) # 输出 1000 的阶乘
14. 函数的性能优化
在 Python 中,函数的性能优化非常重要,尤其是在处理大量数据或复杂计算时。以下是一些常见的优化方法:
1. 避免重复计算
在函数中,尽量避免对同一表达式或计算结果进行多次计算。可以使用变量来保存中间结果,减少重复计算的开销。
# 性能差:重复计算
def calculate(a, b):return (a + b) * (a + b)# 优化:保存中间结果
def optimized_calculate(a, b):sum_ab = a + breturn sum_ab * sum_ab
2. 使用内置函数和库
Python 内置函数通常是用 C 语言实现的,性能上比 Python 自定义的代码更高效。例如,在处理列表时,使用内置的 sum()
、min()
、max()
等函数通常比用 for
循环实现要快。
# 性能差:手动计算和比较
def manual_sum(numbers):total = 0for num in numbers:total += numreturn total# 优化:使用内置函数
def optimized_sum(numbers):return sum(numbers)
3. 使用生成器而非列表
如果不需要一次性加载所有数据,使用生成器而不是列表可以节省大量内存并提高性能,尤其是在处理大数据时。
# 性能差:使用列表
def get_squared_numbers(numbers):return [x ** 2 for x in numbers]# 优化:使用生成器
def get_squared_numbers_generator(numbers):for x in numbers:yield x ** 2
生成器按需计算每个值,而不是一次性将所有值放入内存。
4. 避免过度的函数调用
在一些性能要求较高的代码中,函数调用的开销也可能影响性能。虽然 Python 中的函数调用开销较小,但在处理大量数据时,过多的函数调用会成为性能瓶颈。如果可能,尽量将代码逻辑集中在少数几个函数中。
5. 利用并行化和多线程
Python 中可以使用 concurrent.futures
或 threading
模块来实现多线程或并行计算,从而加速一些耗时的任务。
import concurrent.futuresdef square(x):return x ** 2numbers = [1, 2, 3, 4, 5]# 使用多线程加速计算
with concurrent.futures.ThreadPoolExecutor() as executor:results = list(executor.map(square, numbers))print(results) # 输出 [1, 4, 9, 16, 25]
在 CPU 密集型任务中,使用 concurrent.futures.ProcessPoolExecutor
可以更好地利用多核 CPU。
15. 函数与异步编程(Async Programming)
Python 支持异步编程,可以通过 async def
和 await
关键字来定义异步函数。异步编程通常用于 I/O 密集型任务,比如网络请求、文件操作等,以提高程序的响应性和并发性。
示例:异步函数和事件循环
import asyncioasync def hello_world():print("Hello")await asyncio.sleep(1) # 模拟异步I/O操作print("World")# 运行异步任务
asyncio.run(hello_world())
输出:
Hello
World
在这个例子中,asyncio.sleep(1)
是一个异步操作,await
关键字表示等待该异步操作完成。由于 Python 是单线程运行的,通过异步编程,我们可以在等待 I/O 操作时继续执行其他任务,从而提高效率。
示例:并发执行多个异步任务
import asyncioasync def fetch_data(n):print(f"Fetching data {n}")await asyncio.sleep(1)print(f"Data {n} fetched")return f"Result {n}"async def main():tasks = [fetch_data(i) for i in range(5)]results = await asyncio.gather(*tasks)print(results)# 运行多个异步任务
asyncio.run(main())
输出:
Fetching data 0
Fetching data 1
Fetching data 2
Fetching data 3
Fetching data 4
Data 0 fetched
Data 1 fetched
Data 2 fetched
Data 3 fetched
Data 4 fetched['Result 0', 'Result 1', 'Result 2', 'Result 3', 'Result 4']
在这个例子中,asyncio.gather(*tasks)
用于并发执行多个异步任务,fetch_data()
是一个异步函数,它模拟了 I/O 操作(通过 await asyncio.sleep(1)
)。使用 asyncio.run(main())
来启动事件循环并执行所有任务。
函数的用法说完了,你是否都会用到呢?
相关文章:
python中函数的用法总结(二阶段)
话接上回,继续讲下函数的用法 10. 函数的注解(Function Annotations) Python 3 引入了函数注解,允许你在函数定义时给参数和返回值添加注解。注解并不影响函数的实际行为,它们更多地用于代码的可读性、文档生成以及静…...
1082 射击比赛
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军;谁差得最远,谁就是菜鸟。本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟。我们假设靶心在原点(0,0)。 输入格式:…...
模型工作流:自动化的模型内部三角面剔除
1. 关于自动减面 1.1 自动减面的重要性及现状 三维模型是游戏、三维家居设计、数字孪生、VR/AR等几乎所有三维软件的核心资产,模型的质量和性能从根本上决定了三维软件的画面效果和渲染性能。其中,模型减面工作是同时关乎质量和性能这两个要素的重要工…...
力扣题目解析--两数相除
题目 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.…...
Python PyMupdf 去除PDF文档中Watermark标识水印
通过PDF阅读或编辑工具,可在PDF中加入Watermark标识的PDF水印,如下图: 该类水印特点 这类型的水印,会在文件的字节流中出现/Watermark、EMC等标识,那么,我们可以通过改变文件字节内容,清理掉…...
嵌入式AI STM32部署卷积神经网络的魔法棒
基于STM32部署卷积神经网络控制设备方案-AI项目-STM32部署卷积神经网络方案-红外信号复制方案-轨迹识别 项目包含下述内容 硬件部分、PCB制板、BOM表文件等等 (Hardware)外壳、3D打印文件 (3D_print)软件程序、用于电子法棒的软件程序 AI Keil等等(Software)QT上位机动作识别…...
电路元件与电路基本定理
电流、电压和电功率 电流 1 定义: 带电质点的有序运动形成电流 。 单位时间内通过导体横截面的电量定义为电流强度, 简称电流,用符号 i 表示,其数学表达式为:(i单位:安培(A&#x…...
【蓝桥杯——物联网设计与开发】系列前言
前言 本系列博客是博主为准备2024年第十五届蓝桥杯大赛物联网设计与开发赛道而写,经过4个月学习备战,最终获得全国一等奖。 从第十六届蓝桥杯大赛开始,物联网赛道更换竞赛实训平台。之前的博客,可以借鉴代码思想,但引脚…...
Linux -- 从抢票逻辑理解线程互斥
目录 抢票逻辑代码: thread.hpp thread.cc 运行结果: 为什么票会抢为负数? 概念前言 临界资源 临界区 原子性 数据不一致 为什么数据不一致? 互斥 概念 pthread_mutex_init(初始化互斥锁) p…...
免费干净!付费软件的平替款!
今天给大家介绍一个非常好用的电脑录屏软件,完全没有广告界面,非常的干净简洁。 电脑录屏 无广告的录屏软件 这个软件不需要安装,打开就能看到界面直接使用了。 软件可以全屏录制,也可以自定义尺寸进行录制。 录制的声音选择也非…...
Mybatis插件better-mybatis-generator的下载与使用
1.下载 找到设置 插件 搜索better-mybatis-generator 下载并且重启IDEA 2.连接数据库 点击测试连接 连接成功如下图 3.使用插件 选择对应的表 右击选择 注意:mysql8.0驱动一定要勾上mysql_8 其他地方不要动 然后实体类 mapper xml就都生成好了 mapper里有默认增删…...
【测试】接口测试
长期更新好文,建议关注收藏! 目录 接口规范接口测试用例设计postmanRequests 复习HTTP超文本传输协议 复习cookiesession 实现方式 1.工具 如postman ,JMeter(后者功能更全) 2.代码 pythonrequests / javahttpclient【高级】 接…...
靶机系列|VULNHUB|DC-2
免责声明: 笔记只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 泷羽sec官网:https://longyusec.com/ 泷羽sec B站地址:https://s…...
上手教程:使用Terraform打造弹性VPC架构
最近Akamai发布的虚拟专用云(VPC)功能提供了一种隔离的网络,让云资源可以用私密的方式进行通信。 关于Akamai VPC功能,最棒的地方在于它有着极高的灵活性。用户可以通过Cloud Manager、开发人员工具(如CLI)…...
详解VHDL如何编写Testbench
1.概述 仿真测试平台文件(Testbench)是可以用来验证所设计的硬件模型正确性的 VHDL模型,它为所测试的元件提供了激励信号,可以以波形的方式显示仿真结果或把测试结果存储到文件中。这里所说的激励信号可以直接集成在测试平台文件中,也可以从…...
Kafka为什么要放弃Zookeeper
1.Kafka简介 Apache Kafka最早是由Linkedin公司开发,后来捐献给了Apack基金会。 Kafka被官方定义为分布式流式处理平台,因为具备高吞吐、可持久化、可水平扩展等特性而被广泛使用。目前Kafka具体如下功能: 消息队列,Kafka具有系统解耦、流…...
python 渗透开发工具之SQLMapApi Server不同IP服务启动方式处理 解决方案SqlMapApiServer外网不能访问的情况
目录 说在前面 什么是 SQLMapAPI 说明 sqlmapApi能干什么 sqlmapApi 服务安装相关 kali-sqlmap存放位置 正常启动sqlmap-api server SqlMapApi-Server 解决外网不能访问情况 说在前面 什么是sqlmap 这个在前面已经说过了,如果这个不知道,就可以…...
go语言的成神之路-筑基篇-gin常用功能
第一节-gin参数绑定 目录 第一节-?gin参数绑定 ShouldBind简要概述 功能: 使用场景: 可能的错误: 实例代码 效果展示 第二节-gin文件上传 选择要上传的文件 选择要上传的文件。 效果展示? 代码部分 第三节-gin请求重定向 第…...
K8S中,pod的创建流程
kubelet创建pod流程 流程图 OCI(Open Container Initiative)是一个由docker社区发起的项目,Docker、containerd CNI(Container Network Interface)网络配置:为容器分配IP地址、配置网络接口、设置路由 C…...
Windows系统提示synsoacc.dll文件报错要怎么解决?
一、文件丢失问题:深度剖析与应对策略 文件丢失是电脑运行时常见的问题之一。它可能由多种原因引起,如硬盘故障、病毒攻击、不当的文件操作等。当Windows系统提示synsoacc.dll丢失时,通常意味着该文件对于当前正在运行的程序或系统服务至关重…...
【从0带做】基于Springboot3+Vue3的高校食堂点餐系统
大家好,我是武哥,最近给大家手撸了一个基于SpringBoot3Vue3的高校食堂点餐系统,可用于毕业设计、课程设计、练手学习,系统全部原创,如有遇到网上抄袭站长的,欢迎联系博主~ 项目演示视频和教程视频 https:…...
C语言-基因序列转换独热码(one-hot code)
1.题目要求 (语言: C)在生物信息学家处理基因序列时,经常需要将基因序列转化为独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。 如基因序列有四种状态&…...
git在idea中操作频繁出现让输入token或用户密码,可以使用凭证助手(使用git命令时输入的用户密码即可) use credential helper
1、打开 idea 设置,找到 git 路径 File | Settings | Version Control | Git 2、勾选 Use credential helper 即可...
《机器视觉:开启智能新时代》
《机器视觉:开启智能新时代》 一、机器视觉:工业之眼的崛起二、核心组件:构建精准视觉系统(一)光源:照亮视界的画笔(二)镜头:聚焦精准的慧眼(三)相…...
C#冒泡排序
一、冒泡排序基本原理 冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以一个简单的整数数…...
计算机网络习题(第1章 概论 第2章 数据通信基础)
第1章 概论 1、计算机网络 2、互联网 3、计算机网络体系结构 分层模型 OSI/RM 7层模型 TCP/IP 5层模型 协议、PDU、SDU、SAP等术语 数据封装(计算) 第2章 数据通信基础 1、数据通信系统组成 2、主要性能指标 数据传输速率 码元速率 时延 3…...
从0入门自主空中机器人-4-【PX4与Gazebo入门】
前言: 从上一篇的文章 从0入门自主空中机器人-3-【环境与常用软件安装】 | MGodmonkeyの世界 中我们的机载电脑已经安装了系统和常用的软件,这一篇文章中我们入门一下无人机常用的开源飞控PX4,以及ROS中无人机的仿真 1. PX4的安装 1.1 PX4固件代码的下载…...
百度热力图数据日期如何选择
目录 1、看日历2、看天气 根据研究内容定,一般如果研究城市活力的话,通常会写“非重大节假日,非重大活动,非极端天气等”。南方晴天不多,有小雨或者中雨都可认为没有影响,要不然在南方很难找到完全一周没有…...
深入理解 ElasticSearch 索引与检索原理
在当今数字化浪潮中,数据呈爆炸式增长,如何高效地从海量信息里找到所需内容成为关键。ElasticSearch 凭借其卓越的索引和检索能力脱颖而出,成为众多企业与开发者的得力工具。接下来,让我们深入剖析它的索引和检索工作原理。 一、…...
汽车CAN通信逻辑与LabVIEW开发
CAN通信的核心概念 CAN(Controller Area Network)是一种多主通信协议,广泛应用于汽车电子系统中,用于控制单元之间的高效通信。 消息优先级:每个CAN帧包含唯一的标识符(ID),ID的…...
OWASP~SQL注入
文章只做学习知识,禁止违法。 一、简介 SQL注入是一种Web应用代码中的漏洞。在工作中渗透测试工作时,使用工具扫描、手工注入和绕过WAF注入等找注入点,其中一层不变的构造特殊请求,使其与数据库SQL语句进行闭合。测试完成闭合时会…...
大数据-261 实时数仓 - 业务数据库表结构 交易订单、订单产品、产品分类、商家店铺、地域组织表
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 目前已经更新到了: H…...
大厂开发规范-如何规范的提交Git
多人协作开发提交代码通常是遵循约定式提交规范,如果严格安照约定式提交规范, 手动进行代码提交的话,那么是一件非常痛苦的事情,但是 Git 提交规范的处理又势在必行,那么怎么办呢? 经过了很多人的冥思苦想…...
深度学习中batch_size
Batch size调整和epoch/iteration的关系 训练数据集总共有1000个样本。若batch_size10,那么训练完全体样本集需要100次迭代,1次epoch。 训练样本10000条,batchsize设置为20,将所有的训练样本在同一个模型中训练5遍,则…...
SpringBoot的pom.xml文件中,scope标签有几种配置?
1.compile(默认) 含义:表示该依赖在项目的所有阶段(编译、测试、运行)都需要。 当你依赖一个库,并且这个库是你项目的核心部分,比如 Spring Boot 的spring - boot - starter - web,…...
科技快讯 | 水滴筹成为民政部指定个人求助网络服务平台;小米超级小爱首次向正式版用户开放;腾讯发布全球首个重症医疗大模型
本地 AI 开发利器,初探微软 Win11 AI Dev Gallery 功能 12月27日,科技媒体Windows Latest报道,微软推出AI Dev Gallery功能,助力开发者集成端侧AI。该功能支持Windows 10/11,提供25个示例模型,涵盖多领域。…...
在 Windows 上,如果忘记了 MySQL 密码 重置密码
在 Windows 上,如果忘记了 MySQL 密码,可以通过以下方法重置密码: 方法 1:以跳过权限验证模式启动 MySQL 并重置密码 停止 MySQL 服务: 打开 命令提示符 或 PowerShell,输入以下命令停止 MySQL 服务&#…...
Linux下载RabbitMQ,并解决Github拒绝访问443的问题
RabbitMQ Linux下载资源时,GitHub网站 443 拒绝访问 例如无法直接使用下面命令 rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc在Linux中无法访问Github(外网)资源的都可以采用以下类似的方式 首…...
攻防世界web新手第五题supersqli
这是题目,题目看起来像是sql注入的题,先试一下最常规的,输入1,回显正常 输入1‘,显示错误 尝试加上注释符号#或者–或者%23(注释掉后面语句,使1后面的单引号与前面的单引号成功匹配就不会报错…...
什么是ondelete cascade以及使用sqlite演示ondelete cascade使用案例
什么是ondelete cascade ON DELETE CASCADE是数据库中的一种约束,用于自动删除相关的记录。具体来说,当一个表中的记录(父表)被删除时,与其相关的其他表(子表)中的记录也会被自动删除&…...
Wordperss漏洞 DeDeCMS漏洞
Wordperss漏洞 环境搭建 #执⾏命令 cd /vulhub/wordpress/pwnscriptum docker-compose up -d #靶场地址 http://8.155.7.173:8080/wp-admin/ 注册账号 登录 漏洞一:后台修改模板拿WebShell 步骤一:思路是修改其WP的模板写入⼀句话木马后门并访问其文件…...
人才公寓系统|Java|SSM|JSP|
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...
SQLite本地数据库的简介和适用场景——集成SpringBoot的图文说明
前言:现在项目普遍使用的数据库都是MySQL,而有些项目实际上使用SQLite既足矣。在一些特定的项目中,要比MySQL更适用。 这一篇文章简单的介绍一下SQLite,对比MySQL的优缺点、以及适用的项目类型和集成SpringBoot。 1. SQLite 简介 …...
sqlserver镜像设置
本案例是双机热备,只设置主体服务器(主)和镜像服务器(从),不设置见证服务器 设置镜像前先检查是否启用了 主从服务器数据库的 TCP/IP协议 和 RemoteDAC (1)打开SQL Server配置管理器…...
Chapter 03 复合数据类型-1
1.列表 Python内置的一种有序、可变的序列数据类型; 列表的定义: [ ]括起来的逗号分隔的多个元素组成的序列 列表对象的创建: (1)直接赋值 >>> list1 []#创建一个空列表赋值给list1 >>> list…...
goview——vue3+vite——数据大屏配置系统
低代码数据大屏配置系统: 数据来源是可以动态api配置的: 配置上面的api接口后,在数据过滤中进行数据格式的转化。 以上内容,来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下,需要更改…...
Linux Shell : Process Substitution
注:本文为 “Process Substitution” 相关文章合辑。 英文引文机翻,未校。 Process Substitution. 进程替换允许使用文件名引用进程的输入或输出。它采取以下形式 <(list)or >(list)进程 list 异步运行,其输入或输出显示为文件名。…...
html转PDF
项目场景: 提示:这里简述项目相关背景: 在项目中会有一些需要页面转成PDF的情况,这里需要配合一些插件可以完成 使用html2canvas将使用canvas将页面转为base64图片流,并插入jspdf插件中,保存并下载pdf。…...
React 之 Redux =》 理解+应用
文章目录 Redux基础介绍一、概述二、元素组成1. Action(动作)2. Reducer(纯函数)3. Store(仓库) 三、原理结构四、场景应用1. 大型复杂的单页应用(SPA)2. 多用户协作的应用3. 数据持…...
生成excel文件(有备注和表头的情况)
要使用 Java 导出 Excel 文件,并且通过 ExcelProperty 注解进行列的映射,可以利用 EasyExcel 库。EasyExcel 是阿里巴巴开源的一款高性能 Excel 读写工具,它支持通过注解将类与 Excel 的列进行映射,简化了 Excel 操作的复杂性。 …...