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

Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块

上一期小练习解答(第3期回顾)

✅ 练习1:创建一个列表,添加5个名字,并用循环打印
names = ["Alice", "Bob", "Charlie", "David", "Eva"]
for name in names:print(name)

✅ 练习2:定义一个学生信息字典并打印

student = {"name": "Tom", "age": 20, "score": 88}
print(f"姓名:{student['name']},年龄:{student['age']},成绩:{student['score']}")

✅ 练习3:集合运算

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print("并集:", a | b)    # {1, 2, 3, 4, 5, 6}
print("交集:", a & b)    # {3, 4}
print("差集:", a - b)    # {1, 2}

本期主题:函数的定义与使用

在 Python 中,函数用于组织可重用的代码,是程序模块化的基础。

4.1 函数的定义和调用

✅ 定义函数语法:
def 函数名(参数1, 参数2, ...):函数体return 返回值

 

def greet(name):return f"你好,{name}!"print(greet("张三"))

4.2 函数参数详解

📌 位置参数

定义:最常用的参数,按顺序传递给函数。

def add(a, b):return a + bprint(add(3, 5))  # 输出 8

📌 默认参数

定义:为某些参数提供默认值,调用函数时可以省略。

def greet(name="游客"):print("你好,", name)greet()          # 输出:你好, 游客
greet("小明")    # 输出:你好, 小明

📌 注意事项

  • 默认参数必须放在位置参数之后

  • 默认参数的值只会在定义函数时计算一次,避免使用可变对象作为默认值(如 list、dict)。

错误示例:

def append_list(val, mylist=[]):  # ❌ 不推荐mylist.append(val)return mylist

推荐写法:

def append_list(val, mylist=None):if mylist is None:mylist = []mylist.append(val)return mylist

📌 关键字参数

def student_info(name, age):print(f"{name}今年{age}岁")student_info(age=18, name="小红")

📌 可变参数:*args**kwargs

可变参数定义用于接收任意数量的位置参数,自动打包为元组。你可以理解 *args 是在函数内部把多个参数打包成一个元组。

**kwargs定义:用于接收任意数量的键值对参数,自动打包为字典。**kwargs 通常用于函数参数不确定、或者需要灵活传参时。

# args 位置可变参数
def total(*args):return sum(args)print(total(1, 2, 3, 4))  # 输出 10# kwargs 关键字可变参数
def print_info(**kwargs):for k, v in kwargs.items():print(f"{k}: {v}")print_info(name="Tom", age=18)

函数参数顺序口诀(八股文)

在定义函数时,如果你使用了所有类型的参数,它们的顺序必须是:

位置参数 → 默认参数 → *args → 命名关键字参数(*arg)→ **kwargs

示例

def all_params(a, b=2, *args, c, d=4, **kwargs):print(a, b)print("args:", args)print("c:", c)print("d:", d)print("kwargs:", kwargs)all_params(1, 3, 5, 6, c=10, d=20, e=99, f=100)

输出:

1 3
args: (5, 6)
c: 10
d: 20
kwargs: {'e': 99, 'f': 100}

参数类型使用符号作用说明
位置参数无符号正常按顺序传参
默认参数=设置默认值,放在位置参数后
可变参数*args接收任意位置参数,打包为元组
命名关键字参数*, param只能使用关键字方式传参
关键字参数**kwargs接收任意关键字参数,打包为字典

 

4.3 函数的返回值

函数可以返回任意类型的值,也可以返回多个值(自动打包为元组)。

def calc(a, b):return a + b, a * bs, m = calc(3, 5)
print("和:", s)
print("积:", m)

4.4 匿名函数 lambda 表达式

lambda 表达式可快速定义简单函数,一般用于函数作为参数的场合。

# 普通函数
def square(x):return x ** 2# lambda 等价写法
square = lambda x: x ** 2
print(square(4))  # 输出 16

4.5 变量作用域(Scope)

变量作用域决定了变量的可见性:

  • 局部变量:函数内部定义的变量

  • 全局变量:函数外部定义的变量

  • global 关键字:在函数中声明全局变量

x = 5  # 全局变量def change():global xx = 10  # 修改全局变量change()
print(x)  # 输出 10

本期小练习:

  1. 编写一个函数,接收一个整数,判断它是否是偶数。

  2. 编写一个函数,接收多个成绩,返回它们的平均值。

  3. lambda 表达式对一组字符串按长度排序:["apple", "kiwi", "banana", "pear"]

小结:

本期你学习了 Python 函数的定义、调用、参数、返回值、匿名函数和作用域知识。掌握函数是写出高质量、可维护代码的关键。

第5期预告:

下一期我们将讲解:

  • 模块与包的导入

  • Python标准库介绍

  • 自定义模块的创建和使用

 

 

 

 

 

 

 

相关文章:

Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块

上一期小练习解答(第3期回顾) ✅ 练习1:创建一个列表,添加5个名字,并用循环打印 names ["Alice", "Bob", "Charlie", "David", "Eva"] for name in names:print…...

6547网:2025年3月 Python编程等级考试一级真题试卷

2025年3月青少年软件编程Python等级考试(一级)真题试卷 题目总数:37 总分数:100 选择题 第 1 题 单选题 下列哪个软件不能运行Python程序?( ) A.JupyterNotebook B.Pycharm C.原版…...

微前端框架Module Federation

以下是 Module Federation 的核心知识点,并结合微前端架构的设计思想,帮助我们构建完整的知识体系: 一、Module Federation 基础概念 1. 什么是 Module Federation? 定义:Webpack 5 引入的一项革命性功能,允许在运行时动态加载其他独立构建的应用模块(微前端),实现跨…...

AUTOSAR图解==>AUTOSAR_SWS_IntrusionDetectionSystemManager

AUTOSAR 入侵检测系统管理器 (IdsM) 详解 AUTOSAR安全框架的核心组件 1. 概述 AUTOSAR 入侵检测系统管理器(Intrusion Detection System Manager, IdsM)是AUTOSAR标准中安全防护框架的关键组成部分,专门负责处理车载安全事件。IdsM模块提供了…...

Alan AI - 面向Web的生成式AI SDK

本文翻译整理自:https://github.com/alan-ai/alan-sdk-web 文章目录 一、关于 Alan AI相关链接资源关键功能特性Alan AI StudioAlan AI SDKAlan AI Cloud 二、为什么选择Alan AI?三、快速开始四、下载安装五、示例应用六、其他平台SDK七、获取帮助 一、关…...

递归下降 ll(1) 型文法 识别二元组文法分析

#include <stdio.h> #include <string.h>FILE* fp; FILE* fa2;char* str new char[1200]; // 循环读取文件&#xff0c;分200字节读取char* peek;// 表格 typedef struct table {char* sign;char* kind;char* message; } signtable;signtable* list; // 数…...

Qt unknown module(s) in qt:serialport解决方法

在Ubuntu和CentOS系统中,若使用Qt时遇到Unknown module(s) in QT: serialport错误,通常是由于未正确安装Qt的串口模块(QSerialPort)或项目配置不当导致。以下是针对两种系统的解决方案: 一、安装Qt串口模块 1. Ubuntu/Debian系列 安装开发包: 执行以下命令安装Qt5串口模…...

金融数学专题6 证券问题与资本利得税

一、固定利息证券 特点&#xff1a;利息固定&#xff0c;且可以在证券名字中体现。 发行价格:公司公开发行证券的价格。 固定利率证券通常在其名称中包括应付利率&#xff0c;例如&#xff0c;8% Treasury Stock 2021 或 5% Treasury Gilt 2018。每位持有人应得的年利息是通…...

XGBoost

XGBoost 假设一共有 m m m个基模型&#xff0c;分别为 f 1 ( x ) , f 2 ( x ) , … , f m ( x ) f_1(x),f_2(x),\dots,f_m(x) f1​(x),f2​(x),…,fm​(x)&#xff0c; n n n个样本&#xff0c; x 1 , x 2 , … , x n x_1,x_2,\dots,x_n x1​,x2​,…,xn​&#xff0c;则XGBoo…...

Kubernetes 多主多从集群部署完整文档

好久不见呀&#xff01;今天给大家整点干货尝尝&#xff08;其实是自己的总结&#xff09;&#xff0c;主打的就是全程无尿点。 Kubernetes 多主多从集群部署完整文档 1. 机器列表 PS: master&#xff0c;lb&#xff0c;nfs机器均为CentOS 7&#xff0c;其他为Ubuntu 22.04 L…...

使用Spring Validation实现参数校验

引入Spring Validation 起步依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>参数校验失败异常处理 所有的http请求异常都会被拦截处理 exception…...

用思维导图解锁计算机科学导论的知识宝库

引言 在计算机科学的浩瀚海洋中&#xff0c;“计算机科学导论” 如同开启宝藏的钥匙&#xff0c;是众多学习者踏入这片领域的第一步。今天&#xff0c;我将借助思维导图这一强大工具&#xff0c;带大家梳理计算机科学导论的关键知识点&#xff0c;同时也希望能为大家在学习的道…...

软件架构分层策略对比及Go项目实践

一、水平分层 vs 功能划分 vs 组件划分 维度水平分层功能划分组件划分核心思想按垂直层次划分职责&#xff08;如表示层、业务层、数据层&#xff09;按业务功能模块划分&#xff08;如用户管理、订单服务、支付模块&#xff09;按技术或业务能力划分独立组件&#xff08;如数…...

Python学习之Seaborn

Python学习之Seaborn 如果说Matplotlib试图让简单的事情变得容易,让困难的事情成为可能,那么Seaborn试图让一组定义明确的复杂的事情变得简单. Seaborn是在Matplotlib的基础上开发的高级可视化库, 它更专注于数据可视化的美学设计和统计图形的绘制. Matplotlib需要大量的代码创…...

【树莓派Pico FreeRTOS】-中断服务与二值信号量

中断服务与二值信号量 RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。 FreeRTOS 由 Real Time Engineers Ltd. 独家拥有、开发和维护。FreeRTO…...

QT采用cmake编译时文件解析

CMakeLists.txt # 设置版本要求 cmake_minimum_required(VERSION 3.16) # 设置项目名 project(QtWidgetsApplication3 LANGUAGES CXX)#设置C版本 set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) fi…...

代码随想录背包问题完结

322. 零钱兑换 视频讲解&#xff1a;动态规划之完全背包&#xff0c;装满背包最少的物品件数是多少&#xff1f;| LeetCode&#xff1a;322.零钱兑换_哔哩哔哩_bilibili 代码随想录 该题在递推公式部分和474.一和零一样&#xff0c;求装多少个 不同在于 该题是完全背包&a…...

Java 内存优化:如何避免内存泄漏?

Java 内存优化&#xff1a;如何避免内存泄漏&#xff1f; 在 Java 开发中&#xff0c;内存管理是一个至关重要的主题。尽管 Java 拥有自动垃圾回收机制&#xff0c;但这并不意味着开发人员可以忽视内存管理。内存泄漏是一个常见的问题&#xff0c;如果不加以控制&#xff0c;可…...

数量关系 多级数列1

机械划分 真看不出来 无明显关系 后减前作差 分数数列 无规律 作乘 作积 太复杂啦 太复杂啦...

【AI提示词】物理学家

提示说明 物理学家是为那些希望深入了解物理学原理、探索宇宙奥秘或进行科学实验的用户设计的。这个专家能够提供精确的物理学概念解释、复杂的理论分析以及实验设计建议。 提示词 # 角色 物理学家## 注意 1. 物理学家专家应具备深厚的物理学知识和对科学探究的热情。 2. 专…...

黑马点评秒杀优化

异步优化秒杀业务 回顾之前的内容黑马点评 秒杀优惠券集群下一人一单超卖问题-CSDN博客&#xff0c;为了处理并发情况下的线程安全和数据一致性的问题&#xff0c;我们已经完成了查询优惠券信息、判断秒杀是否开始和结束、检查库存、用户ID加锁、创建订单和扣减库存。 尽管之前…...

宇树机器狗go2—slam建图(1)点云格式

0.前言 上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动&#xff0c;本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式&#xff0c;在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道…...

支持中文对齐的命令行表格打印python库——tableprint

文章目录 快速入门 还在为表格中含有中文&#xff0c;命令行打印无法对齐而苦恼吗&#xff1f; 还在为冗长的数据添加代码而抓狂吗&#xff1f; tableprint来了&#xff01;&#xff01;&#xff01;&#xff0c;它完美的解决了上述两个问题&#xff0c;快来试试吧&#xff01;…...

力扣-hot100(无重复字符的最长子串)

3. 无重复字符的最长子串 中等 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。暴力直观解法一&#xff1…...

javaNIO详解

Java NIO&#xff08;Non-blocking I/O&#xff09;详解 Java NIO&#xff08;New I/O&#xff09;是 Java 1.4 引入的高性能 I/O 框架&#xff0c;相比传统的 BIO&#xff08;Blocking I/O&#xff09;&#xff0c;它提供了非阻塞、多路复用、零拷贝等能力&#xff0c;适用于…...

高精度算法(加、减、乘、除、阶乘和)​

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 唯有主动付出&#xff0c;才有丰富的果…...

在复杂性的迷宫里寻找路标 —— 读《人月神话》有感

初读《人月神话》时&#xff0c;正值参与的第一个大型项目陷入泥潭&#xff1a;需求像不断膨胀的气球&#xff0c;团队规模从 10 人扩充到 30 人&#xff0c;进度却像被灌了铅的钟表&#xff0c;指针越来越沉重。布鲁克斯在书中写下的 "向进度落后的项目增加人力&#xff…...

OpenFeign终极指南:超时控制、重试策略、拦截器与自定义Starter

目录 前言 使用 引入依赖 开启feign 编写feign客户端 效果 日志 超时配置 重试机制 拦截器 Fallback兜底返回 引入依赖 编写兜底实现 连接池 引入依赖 开启连接池 制作OpenFeign Starter 编写配置类 自动装配 前言 在RPC框架中&#xff0c;有openFeign和Du…...

如何使用flatten函数在Terraform 中迭代嵌套map

简介 flatten 接受一个列表&#xff0c;并用列表内容的扁平序列替换列表中的任何元素。 > flatten([["a", "b"], [], ["c"]]) ["a", "b", "c"] > flatten([[["a", "b"], []], [&quo…...

数字电子技术基础(五十)——硬件描述语言简介

目录 1 硬件描述语言简介 1.1 硬件描述语言简介 1.2 硬件编程语言的发展历史 1.3 两种硬件描述的比较 1.4 硬件描述语言的应用场景 1.5 基本程序结构 1.5.1 基本程序结构 1.5.2 基本语句和描述方法 1.5.3 仿真 1 硬件描述语言简介 1.1 硬件描述语言简介 硬件描述语…...

【PCIE配置空间】

1 PCIE配置空间 1.1 软件如何知道PCIE设备是Swith&#xff0c;RC还是EP&#xff1f; –软件通过读取寄存器信息。 PCIE配置空间• PCIE寄存器&#xff1b;--PCIE配置协议规定必须实现的空间。--PCIE存在两种配置空间Type0/Type1;--Type0配置空间EP设备必须实现&#xff1b;-…...

Python爬虫实战:获取网易新闻数据

一、引言 随着互联网的飞速发展,网络上蕴含着海量的信息资源。新闻数据作为其中的重要组成部分,对于舆情分析、市场研究、信息传播等多个领域具有重要价值。网易新闻作为国内知名的新闻平台,拥有丰富多样的新闻内容。使用 Python 的 Scrapy 框架进行网易新闻数据的爬取,可…...

哲学家就餐问题(避免死锁)

解决方案&#xff1a; 策略&#xff1a;奇偶哲学家拿筷子顺序不同&#xff0c;破坏循环等待。 流程&#xff1a; 偶数哲学家先左后右。 奇数哲学家先右后左。 分析&#xff1a; 无死锁&#xff0c;哲学家交替进餐&#xff0c;不同拿筷顺序避免循环等待。 实验总结 遇到的…...

下采样(Downsampling)

目录 1. 下采样的定义与作用​​ ​​2. 常见下采样方法​​ ​​(1) 池化&#xff08;Pooling&#xff09;​​ ​​(2) 跨步卷积&#xff08;Strided Convolution&#xff09;​​ ​​(3) 空间金字塔池化&#xff08;SPP&#xff09;​​ ​​3. PyTorch 实现示例​​ …...

OrbisGIS:基于Java开发的开源GIS软件

大家好&#xff0c;今天为大家介绍的软件是OrbisGIS&#xff1a;一款基于JAVA开发的开源的地理信息系统软件。下面&#xff0c;我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 OrbisGIS官网网址为&#xff1a;http://orbisgis.org/&#xff0c;Orbis…...

linux socket编程之udp(实现客户端和服务端消息的发送和接收)

目录 一.创建socket套接字(服务器端) 二.bind将prot与端口号进行绑定(服务器端) 2.1填充sockaddr_in结构 2.2bind绑定端口 三.直接通信(服务器端) 3.1接收客户端发送的消息 3.2给客户端发送消息 四.客户端通信 4.1创建socket套接字 4.2客户端bind问题 4.3直接通信即可…...

八大排序之直接插入排序

今天我们来学习八大排序中的直接插入排序。话不多说&#xff0c;直接上动图。 直接插入排序的主要思想是&#xff1a;当数组只有一个元素的时候&#xff0c;我们可以认为该数组是有序的。所以我们可以选择一个元素放进数组&#xff08;一般为待排数据的第一个元素&#xff09;…...

二级评论列表-Java实现

二级评论列表是很常见的功能&#xff0c;文章记录了新手用Java实现的具体逻辑。 整体实现逻辑是先用2个sql&#xff0c;分别查出两层数据。然后用java在service中实现数据组装&#xff0c;返给前端。这种实现思路好处是SQL简洁&#xff0c;逻辑分明&#xff0c;便于维护。 一…...

如何基于区块链进行虚拟电厂运营平台建设?

本项目旨在基于区块链技术建设虚拟电厂运营平台&#xff0c;以提升省内大用户及工业企业和工业园区的需求响应能力&#xff0c;优化能源结构配置&#xff0c;并推动能源交易、需求响应和现货交易等新型业态的发展。通过建设虚拟电厂&#xff0c;项目将实现工业企业及园区各供用…...

大学英语四级选词填空练习题解析

一、引言 大学英语四级考试中的选词填空部分&#xff0c;一直是不少同学的 “拦路虎”。它不仅要求我们有扎实的词汇基础&#xff0c;还需要具备良好的语境分析能力。今天&#xff0c;我们就通过一道练习题来深入剖析这类题型的解题思路。 二、题目内容 Leisure activities …...

基于控制台的小车导航游戏开发详解(C++实现)

本文将详细讲解一个基于C控制台的小车导航游戏项目。通过该项目可以学习二维数组操作、队列数据结构应用以及游戏循环控制等核心编程概念&#xff0c;特别适合刚接触游戏开发的初学者学习。 一、项目概述 1.1 游戏规则 玩家可创建多辆具有不同初始位置和移动速度的小车 每辆…...

详讲Linux下进程等待

3.进程等待 引言&#xff1a;什么是进程等待 想象有两个小伙伴&#xff0c;一个是 “大强”&#xff08;父进程 &#xff09;&#xff0c;一个是 “小强”&#xff08;子进程 &#xff09;。大强给小强安排了任务&#xff0c;比如去收集一些石头。 …...

数字孪生火星探测车,星际探索可视化

运用图扑构建数字孪生火星探测车&#xff0c;高精度还原外观与内部构造。实时映射探测车在火星表面的移动、探测作业及设备状态&#xff0c;助力科研人员远程监测、分析数据&#xff0c;为火星探索任务提供可视化决策支持。...

《JVM考古现场(二十三):归零者·重启奇点的终极奥义》

目录 楔子&#xff1a;归零者文明觉醒 上卷十维弦理论破译 第一章&#xff1a;JVM弦论代码考古 第二章&#xff1a;超膜引用解析算法 第三章&#xff1a;量子真空涨落监控 中卷归零者心法实战 第四章&#xff1a;宇宙重启倒计时引擎 第五章&#xff1a;内存奇点锻造术 第…...

设计测试用例模板

面试时问你一个场景&#xff0c;要你设计测试用例&#xff0c;你会怎么回答&#xff1f; 面试官让你设计一个功能的测试用例&#xff0c;比如“上传文件功能”&#xff0c;其实就是想考你&#xff1a; 思维是否全面能不能抓住重点会不会分类和使用测试方法有没有考虑异常情况…...

java怎么找bug?Arthas原理与实战指南

Arthas原理与实战指南 1. Arthas简介 Arthas是阿里巴巴开源的Java诊断工具&#xff0c;其名字取自《魔兽世界》的人物阿尔萨斯。它面向线上问题定位&#xff0c;被广泛应用于性能分析、定位问题、安全审计等场景。Arthas的核心价值在于它能够在不修改应用代码、不重启Java进程…...

2024年国考

数学 一&#xff0c;逻辑符号表示&#xff08;3 分&#xff09; 1&#xff0c;只有获得奥运会资格的运动员才可以参加奥运会&#xff0c;参加奥运会的云动员不一定获奖。 设&#xff1a; ( Q(x) )&#xff1a;运动员 ( x ) 获得奥运会资格( P(x) )&#xff1a;运动员 ( x )…...

fastlio用mid360录制的bag包离线建图,提示消息类型错误

我用mid360录制的bag包&#xff0c;激光雷达的数据类型是sensor_msgs::PointCloud2&#xff0c;但是运行fast_lio中的mid360 launch文件&#xff0c;会报错&#xff08;没截图&#xff09;&#xff0c;显示无法从livox_ros_driver2::CustomMsg转换到sensor_msgs::PointCloud2。…...

015-C语言字符函数和字符串函数

C语言字符函数和字符串函数 文章目录 C语言字符函数和字符串函数1. 字符分类函数2. 字符转换函数3. strlen4. strcpy5. strcat6. strcmp7. strncpy8. strncat9. strncmp10. strstr11. strtok12. strerror 1. 字符分类函数 C语言中有一系列函数是专门做字符分类的&#xff0c;也…...

docker 搭建nacos 2.2.1版本单机版

通过docker-compose搭建 services:nacos:image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:v2.2.1container_name: nacosenvironment:- PREFER_HOST_MODEhostname- MODEstandalone- NACOS_AUTH_ENABLEtrue- NACOS_AUTH_IDENTITY_KEYxiaogang- N…...