Python 函数的学习笔记
Python 函数的学习笔记
- 0. Python 函数的概要说明
- 1. 自定义函数示例
- 2. 匿名函数示例
- 3. 内置函数示例
- 3-1. filter() 示例
- 3-2. map() 示例
- 3-3. reduce() 示例
- 4. 可变长参数`*args`和`**kwargs`示例
- 4-1. `*args`(Positional Variadic Arguments)
- 4-2. `**kwargs`(Keyworded Variadic Arguments)
- 4-3. 结合使用`*args`和`**kwargs`
- 4-4. 解包参数
0. Python 函数的概要说明
在Python中,函数是一块组织好的、可重复使用的代码,用于执行单一、相关的动作。函数可以接受输入参数,也可以返回结果。使用函数可以让你编写更整洁、更可读、更易于维护的代码,同时也能够减少代码重复,提高开发效率。
下面是关于Python函数的一些介绍:
- 定义函数:
Python中使用def关键字来定义函数。函数定义包括函数名、参数列表(位于括号内)和冒号。函数体是缩进的代码块。
在这个例子中,def greet(name):"""这是一个简单的问候函数"""return f"Hello, {name}!"greet是一个接受一个参数name的函数,它返回一个包含名字的问候语。 - 函数参数:
- 位置参数:按照定义时的顺序传递的参数。
- 关键字参数:通过参数名来指定参数值的参数,这样可以不按照顺序传递参数。
- 默认参数:在定义函数时可以给参数指定默认值。
- 可变长参数:函数可以接受任意数量的参数,如
*args和**kwargs。
- 返回值:
函数可以使用return语句返回一个或多个值。如果没有return语句,函数会在执行完毕后自动返回None。 - 文档字符串(Docstrings):
Python函数通常包含一个文档字符串,这是一个位于函数定义下方第一行的字符串,用于解释函数的作用。可以使用"""或'''来定义文档字符串。 - 作用域:
函数内的变量作用域是局部的,意味着在函数外部无法访问这些变量。函数可以访问全局作用域的变量,但无法直接修改全局变量。如果需要在函数内部修改全局变量,可以使用global关键字声明。 - 匿名函数:
Python支持匿名函数,也称为Lambda函数。Lambda函数可以接受任何数量的参数,但只能有一个表达式。它们通常用于编写简单的、一次性的小函数。add = lambda x, y: x + y - 递归:
函数可以调用自身,这种操作称为递归。递归函数在处理分而治之的问题时非常有用,如树的遍历、阶乘计算等。 - 高阶函数:
Python函数是一等公民,可以作为参数传递给其他函数,也可以从其他函数返回,甚至可以被赋值给变量。能够接受函数作为参数或返回函数的函数称为高阶函数。
1. 自定义函数示例
示例代码,
def square(x):squared = x * xreturn squaredprint(square(2))
输出结果,
4
2. 匿名函数示例
示例代码,
square = lambda x: x * x
print(square(2))
输出结果,
4
3. 内置函数示例
示例代码,
filtered = list(filter(lambda x: x > 2, range(1, 5)))
filtered
输出结果,
[3, 4]
3-1. filter() 示例
示例代码,
filtered = list(filter(lambda x: x > 2, range(1, 5)))
filtered
输出结果,
[3, 4]
3-2. map() 示例
示例代码,
mapped = list(map(lambda x: x * x, range(1, 5)))
mapped
输出结果,
[1, 4, 9, 16]
3-3. reduce() 示例
示例代码,
from functools import reducereduced = reduce(lambda x, y: x + y, range(1, 5))
reduced
输出结果,
10
4. 可变长参数*args和**kwargs示例
在Python中,可变长参数允许函数接受任意数量的位置参数和关键字参数。这提供了极大的灵活性,使得函数可以处理不同数量和类型的参数。
4-1. *args(Positional Variadic Arguments)
*args允许你传递任意数量的非关键字参数给一个函数。在函数内部,*args被解释为一个元组。
示例,
def sum_all(*args):"""计算所有传入数字的和"""total = 0for num in args:total += numreturn total# 调用函数
print(sum_all(1, 2, 3, 4, 5)) # 输出: 15
在这个例子中,sum_all函数接受任意数量的参数,并将它们相加。当你调用sum_all(1, 2, 3, 4, 5)时,*args在函数内部被当作(1, 2, 3, 4, 5)这个元组来处理。
4-2. **kwargs(Keyworded Variadic Arguments)
**kwargs允许你传递任意数量的关键字参数给一个函数。在函数内部,**kwargs被解释为一个字典,其中键是参数名,值是参数值。
示例,
def print_info(**kwargs):"""打印所有传入的关键字参数"""for key, value in kwargs.items():print(f"{key}: {value}")# 调用函数
print_info(name='Alice', age=25, job='Engineer')
# 输出:
# name: Alice
# age: 25
# job: Engineer
在这个例子中,print_info函数接受任意数量的关键字参数,并打印它们。当你调用print_info(name='Alice', age=25, job='Engineer')时,**kwargs在函数内部被当作{'name': 'Alice', 'age': 25, 'job': 'Engineer'}这个字典来处理。
4-3. 结合使用*args和**kwargs
你可以在同一个函数中同时使用*args和**kwargs,这样可以处理任意数量的位置参数和关键字参数。
示例,
def func(*args, **kwargs):print("Positional arguments:", args)print("Keyword arguments:", kwargs)# 调用函数
func(1, 2, 3, a=4, b=5)
# 输出:
# Positional arguments: (1, 2, 3)
# Keyword arguments: {'a': 4, 'b': 5}
在这个例子中,func函数接受任意数量的位置参数和关键字参数,并分别打印它们。
4-4. 解包参数
你还可以在调用函数时使用*和**操作符来解包迭代器和字典,将它们作为参数传递给函数。
示例,
def multiply(x, y):return x * y# 已有元组和字典
numbers = (2, 3)
keywords = {'x': 4, 'y': 5}# 使用*和**解包元组和字典
print(multiply(*numbers)) # 等同于multiply(2, 3)
print(multiply(**keywords)) # 等同于multiply(x=4, y=5)
在这个例子中,multiply函数接受两个参数。通过使用*numbers,元组(2, 3)被解包成两个位置参数;通过使用**keywords,字典{'x': 4, 'y': 5}被解包成两个关键字参数。
完结!
相关文章:
Python 函数的学习笔记
Python 函数的学习笔记 0. Python 函数的概要说明1. 自定义函数示例2. 匿名函数示例3. 内置函数示例3-1. filter() 示例3-2. map() 示例3-3. reduce() 示例 4. 可变长参数*args和**kwargs示例4-1. *args(Positional Variadic Arguments)4-2. **kwargs&am…...
详解 Redis 实现数据去重
✨✨ 欢迎大家来到喔的嘛呀的博客✨✨ 🎈🎈希望这篇博客对大家能有帮助🎈🎈 目录 言 一. Redis去重原理 1. Redis Set 数据结构 2. 基于 Set 实现数据去重 3. 代码示例 4. 总结 …...
FreeRTOS 延迟中断处理
采用二值信号量同步 二值信号量可以在某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断 同步。这样就可以让中断事件处理量大的工作在同步任务中完成,中断服务例程(ISR) 中只是快速处理少部份工作。如此,中断处理可以说是…...
计网体系结构
计算机网络的概述 概念 网络:网状类的东西或系统。 计算机网络:是一个将分散的、具有独立性功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。即计算机网络是互连(通过通信链路互连…...
linux系统zabbix工具监控web页面
web页面监控 内建key介绍浏览器配置浏览器页面查看方式 监控指定的站点的资源下载速度,及页面响应时间,还有响应代码; web Scenario: web场景(站点)web page :web页面,一个场景有多…...
VMware虚拟机网络配置
VMware虚拟机网络配置 桥接模式NAT网络 桥接模式 桥接模式其实就是借助你宿主机上的网卡进行联网和通信,所以相当于虚拟机和宿主机平级,处于同一个网段中。 配置要点: 注意选择正确的宿主机网卡 查看宿主机的网络信息,这些信息指…...
代码随想录算法训练营DAY18 | 二叉树 (5)
一、LeetCode 513 找树左下角的值 题目链接:513.找树左下角的值https://leetcode.cn/problems/find-bottom-left-tree-value/ 思路一:递归回溯全局变量比深度。 class Solution {int Max_depth 0;int result 0;public int findBottomLeftValue(TreeNo…...
企业微信自动推送机器人的应用与价值
随着科技的快速发展,企业微信自动推送机器人已经成为了企业数字化转型的重要工具。这种机器人可以自动推送消息、执行任务、提供服务,为企业带来了许多便利。本文将探讨企业微信自动推送机器人的应用和价值。 一、企业微信自动推送机器人的应用 企业微信…...
Matplotlib plt.plot:从入门到精通,只需一篇文章!
Matplotlib plt.plot:从入门到精通,只需一篇文章! 利用Matplotlib进行数据可视化示例 🌵文章目录🌵 📊 1. 引言:为什么Matplotlib在数据可视化中如此重要?📊✨ 2. plt.pl…...
Linux中sigaction函数和SIGCHLD信号的使用
sigaction函数: 函数说明:注册一个信号处理函数 函数原型:int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 函数参数: signum:捕捉的信号act:传入参数,…...
【MySQL】操作库 —— 表的操作 -- 详解
一、增加表 1、创建表 mysql> create database [if not exists] table_name ( -> field1 datatype, -> field2 datatype, -> field3 datatype -> ) character set 字符集 collate 校验规则 engine 存储引擎; 注意 :最后一行也可以写成&#x…...
ZigBee学习——在官方例程实现组网
✨Z-Stack版本:3.0.2 ✨IAR版本:10.10.1 ✨这篇博客是在善学坊BDB组网实验的基础上进行完善,并指出实现的过程中会出现的各种各样的问题! 善学坊教程地址: ZigBee3.0 BDB组网实验 文章目录 一、基础工程选择二、可能遇…...
ES实战--wildcard正则匹配exists过滤字段是否存在
wildcard 通配符中的 * 表示任意数量的字符 ?表示任意单个字符 #正则匹配 GET /wildcard-test/_search {"query": {"wildcard": {"title": {"wildcard": "ba*n"}}} } #响应:"hits": {"total": {"…...
C++学习:二分查找
二分查找的前提 库函数只能对数组进行二分查找。 对一个数组进行二分查找的前提是这个数组中的元素是单调的。 一般为单调不减,当然如果是单调不增也可以(需要修改比较函数) 例如: [1,5,5,9,18]是单调的 [1 , 9, 9,…...
语言与科技创新(大语言模型对科技创新的影响)
1.语言因素对科技创新的影响 科技创新中的语言因素至关重要,具体体现在以下几个方面: 科技文献交流: 英语作为全球科学研究的通用语言,极大地推动了科技成果的国际传播与合作。在国际上,科学家们在发表论文、报告研究…...
【C语言】简单贪吃蛇实现保姆级教学!!!
关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 新年快乐呀小伙伴 引言: 小伙伴们应该都有一个做游戏的梦吧?今天让小庄来用C语言简单实现一下我们的童年邪典贪吃蛇,顺便巩固我们的C语言知识,请安心食用~ 文章目录 贪吃蛇效果一.游戏前工作…...
rtt设备io框架面向对象学习-uart设备
目录 1.uart设备基类2.uart设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.uart设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的serial.h定义了如下uart设备基类 struc…...
Innodb下修改事务工作流程(buffer pool、redo log、undolog)
1、在Buffer Pool中读取数据:当InnoDB需要更新一条记录时,首先会在Buffer Pool中查找该记录是否在内存中。如果没有在内存中,则从磁盘读取该页到Buffer Pool中。 2、记录UndoLog:在修改操作前,InnoDB会在Undo Log中记…...
redis为什么使用跳跃表而不是树
Redis中支持五种数据类型中有序集合Sorted Set的底层数据结构使用的跳跃表,为何不使用其他的如平衡二叉树、b树等数据结构呢? 1,redis的设计目标、性能需求: redis是高性能的非关系型(NoSQL)内存键值数据…...
【matalab】基于Octave的信号处理与滤波分析案例
一、基于Octave的信号处理与滤波分析案例 GNU Octave是一款开源软件,类似于MATLAB,广泛用于数值计算和信号处理。 一个简单的信号处理与滤波分析案例,说明如何在Octave中生成一个有噪声的信号,并设计一个滤波器来去除噪声。 首…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...
C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...
【多线程初阶】单例模式 指令重排序问题
文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…...
