Python学习——函数参数详解
Python中的函数参数传递机制允许多种灵活的参数类型,可以根据需求灵活配置参数,这使得函数具有更强大的扩展性和适应性。以下是对各类参数类型的详细说明:
1. 定义函数的不同参数类型
1.1 位置参数
- 定义方式:
def func(a, b=2) - 特点:
- 必须按顺序传递,否则会抛出
TypeError。 - 缺少时使用默认值。
- 必须按顺序传递,否则会抛出
- 示例:
def func(a, b=2):print(f"a={a}, b={b}")func(1)→ a=1, b=2func(1,3)→ a=1, b=3
1.2 可变参数(*args)
- 定义方式:
def func(*args) - 特点:
- 接收所有未命名的位置参数,存储为元组。
- 适用于接受任意数量位置参数的情况。
- 示例:
def func(*args):print(f"args={args}")func(1,2,3)→ args=(1,2,3)func()→ args=()
1.3 关键字参数(**kwargs)
- 定义方式:
def func(c=4, **kwargs) - 特点:
- 接收所有未命名的关键字参数,存储为字典。
- 适用于需要传递可变数量的关键字参数的情况。
- 示例:
def func(c=4, **kwargs):print(f"c={c}, kwargs={kwargs}")func(key1=1)→ c=4, kwargs={‘key1’:1}func(key2=2, key3=3)→ c=4, kwargs={‘key2’:2, ‘key3’:3}
1.4 混合参数
- 可以在同一个函数中混合使用位置、默认、可变和关键字参数。
- 示例:
def func(a, b=2, *args, c=4, **kwargs):print(f"a={a}, b={b}, args={args}, c={c}, kwargs={kwargs}")func(10)→ a=10, b=2, args=(), c=4, kwargs={}func(10,5,6,7)→ a=10, b=5, args=(6,7), c=4, kwargs={}func(10, key1=1)→ a=10, b=2, args=(), c=4, kwargs={‘key1’:1}func(10, key1=1, key2=2)→ a=10, b=2, args=(), c=4, kwargs={‘key1’:1, ‘key2’:2}
2. 参数传递的处理流程
-
步骤一:匹配位置参数
- 首先,尝试将提供的位置参数与定义中的位置参数对应。如果没有足够的参数且缺少默认值,则抛出错误。
-
步骤二:收集可变参数(*args)
- 剩余的未命名的位置参数会被收集到
args元组中。
- 剩余的未命名的位置参数会被收集到
-
步骤三:处理关键字参数
- 检查是否有未指定为位置的关键字参数。如果存在,则将这些关键字参数添加到
kwargs字典中。
- 检查是否有未指定为位置的关键字参数。如果存在,则将这些关键字参数添加到
3. 示例应用
3.1 使用可变参数和关键字参数
def greet(name, age, *args, city="北京", **kwargs):return f"欢迎!{name},你是{age}岁,并且来自{city}."
- 调用方式:
greet("张三", 30)→ 欢迎!张三,你是30岁。greet("李四", 25, "上海")→ 欢迎!李四,你是25岁,来自上海。greet("王五", 28, "广州", province="山东")→ 欢迎!王五,你是28岁,来自广州。
3.2 使用混合参数
def calculate(a, b=0, *args, c=5, d=10, **kwargs):return f"a={a}, b={b}, args={args}, c={c}, d={d}, kwargs={kwargs}"
- 调用方式:
calculate(10)→ a=10, b=0, args=(), c=5, d=10, kwargs={}calculate(15, 20, 30, 40, city="上海")→ a=15, b=20, args=(30,40), c=5, d=10, kwargs={‘city’:‘上海’}
4. 注意事项
- 关键字参数必须明确声明,否则会导致语法错误。
*args和**kwargs不能同时使用在同一个参数位置,除非明确分隔。- 参数传递顺序需遵守定义顺序,混用时需注意位置与关键字的匹配。
通过掌握这些知识,你可以灵活地构建函数参数结构,满足不同的需求。
相关文章:
Python学习——函数参数详解
Python中的函数参数传递机制允许多种灵活的参数类型,可以根据需求灵活配置参数,这使得函数具有更强大的扩展性和适应性。以下是对各类参数类型的详细说明: 1. 定义函数的不同参数类型 1.1 位置参数 定义方式:def func(a, b2) 特…...
Chromium132 编译指南 - Android 篇(一):编译前准备
1. 引言 欢迎来到《Chromium 132 编译指南 - Android 篇》系列的第一部分。本系列指南将引导您逐步完成在 Android 平台上编译 Chromium 132 版本的全过程。Chromium 作为一款由 Google 主导开发的开源浏览器引擎,为众多现代浏览器提供了核心驱动力。而 Android 作…...
.Net / C# 繁体中文 与 简体中文 互相转换, 支持地方特色词汇
版本号 Nuget 搜索 “OpenCCNET”, 注意别找错, 好多库的名字都差不多 支持 “繁,简” 的互相转换, 支持多个地区常用词汇的转换, 还支持 日文的新旧转换. OpenCC 在 .Net 中的实现 https://github.com/CosineG/OpenCC.NET <PackageReference Include"OpenCCNET"…...
Java泛型深度解析(JDK23)
第一章 泛型革命 1.1 类型安全的进化史 前泛型时代的类型转换隐患 代码的血泪史(Java 1.4版示例): List rawList new ArrayList(); rawList.add("Java"); rawList.add(Integer.valueOf(42)); // 编译通过// 灾难在运行时爆发…...
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:贪心算法篇–CSDN博客 文章目录 一.贪心算法1.什么是贪心算法2.贪心算法的特点 二.例题1.柠…...
AJAX XML
AJAX XML 引言 随着互联网技术的不断发展,Web应用对用户交互性和实时性的要求越来越高。AJAX(Asynchronous JavaScript and XML)技术的出现,为Web应用开发提供了强大的支持。AJAX技术允许Web应用在不重新加载整个页面的情况下,与服务器进行异步通信。XML作为数据传输格式…...
踏入编程世界的第一个博客
我,一个双非一本大一新生,普通的不能再普通了,面对宏伟庞大的计算机世界仍显得举手无措,我自以为自身仍有些许骨气,不想普普通通,甚是浑浑噩噩的度过四年大学,经历了高考的打击,双非…...
2025年1月22日(网络编程 udp)
系统信息: ubuntu 16.04LTS Raspberry Pi Zero 2W 系统版本: 2024-10-22-raspios-bullseye-armhf Python 版本:Python 3.9.2 已安装 pip3 支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480) 已安装 vim 已安装 git 学习…...
数据结构与算法之栈: LeetCode 641. 设计循环双端队列 (Ts版)
设计循环双端队列 https://leetcode.cn/problems/design-circular-deque/description/ 描述 设计实现双端队列。 实现 MyCircularDeque 类: MyCircularDeque(int k) :构造函数,双端队列最大为 k 。boolean insertFront():将一个元素添加到双端队列头部…...
从零开始学 HTML:构建网页的基本框架与技巧
系列文章目录 01-从零开始学 HTML:构建网页的基本框架与技巧 文章目录 系列文章目录前言一、HTML 文档的基本框架1.1 <!DOCTYPE html>、<html>、<head>、<body> 标签解析1.1.1 <!DOCTYPE html> 标签1.1.2 <html> 标签1.1.3 &l…...
一些杂记2
1.#define 1.1定义 #define 是一个预处理指令,用于定义宏 宏,是预处理阶段(在编译之前)由预处理器处理的代码片段 1.2使用 1.2.1 #define 可以定义常量 #define PI 3.14159 1.2.2 #define 可以定义宏函数 #define SQUARE(x) ((…...
C语言 --- 分支
C语言 --- 分支 语句分支语句含义if...else语句单分支if语句语法形式 双分支 if-else 语句语法形式 悬空else含义问题描述 多分支 if-else 语句语法形式 switch...case语句含义语法形式 总结 💻作者简介:曾与你一样迷茫,现以经验助你入门 C 语…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.10 ndarray内存模型:从指针到缓存优化
2.10 ndarray内存模型:从指针到缓存优化 目录 #mermaid-svg-p0zxLYqAnn59O2Xe {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-p0zxLYqAnn59O2Xe .error-icon{fill:#552222;}#mermaid-svg-p0zxLYqAnn59O…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.6 广播机制核心算法:维度扩展的数学建模
2.6 广播机制核心算法:维度扩展的数学建模 目录/提纲 #mermaid-svg-IfELXmhcsdH1tW69 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IfELXmhcsdH1tW69 .error-icon{fill:#552222;}#mermaid-svg-IfELXm…...
K8S极简教程(4小时快速学会)
1. K8S 概览 1.1 K8S 是什么 K8S官网文档:https://kubernetes.io/zh/docs/home/ 1.2 K8S核心特性 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。存储编排:自动挂载所选存储系统,包括本地存储。Secret和…...
系统URL整合系列视频二(界面原型)
视频 系统URL整合系列视频二(界面原型) 视频介绍 (全国)大型分布式系统Web资源URL整合需求界面原型讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格,控制粒度也越来越细。安全级别提高的同时也增加…...
虚幻浏览器插件 UE与JS通信
温馨提示:本节内容需要结合插件Content下的2_Communication和Resources下的sample.html 一起阅读。 1. UE调用JS 1.1 JS脚本实现 该部分共两步: 导入jstote.js脚本实现响应函数并保存到 ue.interface 中 jsfunc 通过json对象传递参数,仅支持函数名小…...
OpenAI深夜反击:o3-mini免费上线,能否撼动DeepSeek的地位?
还在为寻找合适的 AI 模型而烦恼吗?chatTools 平台为您精选 o1、GPT4o、Claude、Gemini 等顶尖 AI 模型,满足您不同的 AI 应用需求。立即体验强大的 AI 能力! 深夜反击,OpenAI祭出o3-mini 在DeepSeek异军突起,搅动AI行…...
Golang 应用的 Docker 部署方式介绍及使用详解
本文将介绍如何使用 Docker 部署一个基于 Go 语言的后台服务应用 godco,并介绍如何配置 MongoDB 数据库容器的连接,确保应用能够成功启动并连接到容器方式部署的mongoDB数据库。 前提条件 1.已安装 Docker/Podman 2.已安装 MongoDB 数据库容器ÿ…...
deep seek R1本地化部署及openAI API调用
先说几句题外话。 最近deep seek火遍全球,所以春节假期期间趁着官网优惠充值了deep seek的API,用openAI的接口方式尝试了下对deep seek的调用,并且做了个简单测试,测试内容确实非常简单:通过prompt提示词让大模型对用…...
基于Claude API的智能银行应用原型:AI-First前端交互架构实践
1. 项目概述:一个基于Claude API的智能银行应用原型 最近在GitHub上看到一个挺有意思的开源项目,叫“ClaudeBankingApp”。光看名字,你可能会觉得这是个什么复杂的金融科技产品,其实不然。这是一个由开发者tzockoll-creator创建的…...
避开这些坑,你的YOLO论文才能发得快!目标检测老鸟的实战避坑与效率工具清单
YOLO论文高效产出指南:目标检测老手的避坑策略与工具链实战 实验室的灯光在凌晨三点依然亮着,屏幕上YOLOv8的loss曲线却像心电图一样毫无规律地跳动着。这已经是本周第三次复现顶会论文失败,而距离截稿日期只剩三周。如果你也经历过这种"…...
FPGA开发入门:从零开始用Vivado实现LED流水灯项目
1. 项目概述与核心价值最近在后台和社群里,看到不少刚接触FPGA开发的朋友,特别是从单片机或嵌入式软件转过来的,对于如何上手第一个完整的FPGA项目感到有些迷茫。大家常问:“我学了Verilog语法,也跑过仿真了࿰…...
CommonJS、RequireJS 与 ES6 模块:JavaScript 模块化演进史
JavaScript 诞生之初并没有模块化机制。随着应用规模扩大,全局变量冲突、依赖管理混乱等问题日益突出。社区和标准组织先后推出了多种模块化方案,其中最著名的是 CommonJS(主要用于服务器端)、AMD / RequireJS(主要用于浏览器端)以及 ES6 Module(官方标准)。 CommonJS、…...
SAP ECC6 2027年停服倒计时:手把手教你评估四大迁移路径与成本(含第三方支持避坑指南)
SAP ECC6 2027年停服倒计时:企业迁移决策全景指南 当2027年的钟声敲响时,全球仍在运行SAP ECC6系统的企业将面临一个关键转折点。这不是简单的技术升级,而是一次关乎企业数字化未来的战略抉择。作为经历过三次SAP重大版本迁移的顾问ÿ…...
ISE FPGA开发全流程实战:从代码到比特流的经典设计指南
1. 项目概述与核心价值如果你正准备踏入FPGA开发的大门,或者已经用了一段时间的Vivado,想看看业界另一个主流工具ISE(Integrated Software Environment)到底怎么玩,那这个系列的内容就是为你准备的。ISE是Xilinx&#…...
149.PyTorch+YOLOv8 实战|口罩检测全流程,含模型评估与 ONNX 导出
摘要 YOLO(You Only Look Once)作为目标检测领域最经典的一阶段算法,自2015年提出以来经历了v1至v9的多次迭代,在工业界和学术界均占据了重要地位。 本文以Ultralytics官方库为基础,从核心原理出发,系统讲解YOLO的架构设计、训练流程与推理部署。通过一个完整的口罩检测…...
2026届最火的十大降重复率网站横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当下,学术创作效率需求持续提升,智能一键论文生成类工具,…...
鸿蒙页面代码构建:基于 HarmonyOS 6.0 的跨端开发实战
鸿蒙页面代码构建:基于 HarmonyOS 6.0 的跨端开发实战 前言 随着移动互联网和物联网的深度融合,应用开发正在从单一平台走向跨端、多终端协作的时代。华为鸿蒙操作系统(HarmonyOS)自诞生以来,一直致力于为开发者提供统…...
GitHub中文界面极速解锁指南:5分钟告别英文困扰的终极方案
GitHub中文界面极速解锁指南:5分钟告别英文困扰的终极方案 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾经面对…...
