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

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=2
    • func(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 类型安全的进化史 前泛型时代的类型转换隐患 代码的血泪史&#xff08;Java 1.4版示例&#xff09;&#xff1a; List rawList new ArrayList(); rawList.add("Java"); rawList.add(Integer.valueOf(42)); // 编译通过// 灾难在运行时爆发…...

【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(一)

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;贪心算法篇–CSDN博客 文章目录 一.贪心算法1.什么是贪心算法2.贪心算法的特点 二.例题1.柠…...

AJAX XML

AJAX XML 引言 随着互联网技术的不断发展,Web应用对用户交互性和实时性的要求越来越高。AJAX(Asynchronous JavaScript and XML)技术的出现,为Web应用开发提供了强大的支持。AJAX技术允许Web应用在不重新加载整个页面的情况下,与服务器进行异步通信。XML作为数据传输格式…...

踏入编程世界的第一个博客

我&#xff0c;一个双非一本大一新生&#xff0c;普通的不能再普通了&#xff0c;面对宏伟庞大的计算机世界仍显得举手无措&#xff0c;我自以为自身仍有些许骨气&#xff0c;不想普普通通&#xff0c;甚是浑浑噩噩的度过四年大学&#xff0c;经历了高考的打击&#xff0c;双非…...

2025年1月22日(网络编程 udp)

系统信息&#xff1a; ubuntu 16.04LTS Raspberry Pi Zero 2W 系统版本&#xff1a; 2024-10-22-raspios-bullseye-armhf Python 版本&#xff1a;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) &#xff1a;构造函数,双端队列最大为 k 。boolean insertFront()&#xff1a;将一个元素添加到双端队列头部…...

从零开始学 HTML:构建网页的基本框架与技巧

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 文章目录 系列文章目录前言一、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 是一个预处理指令&#xff0c;用于定义宏 宏&#xff0c;是预处理阶段&#xff08;在编译之前&#xff09;由预处理器处理的代码片段 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语句含义语法形式 总结 &#x1f4bb;作者简介&#xff1a;曾与你一样迷茫&#xff0c;现以经验助你入门 C 语…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.10 ndarray内存模型:从指针到缓存优化

2.10 ndarray内存模型&#xff1a;从指针到缓存优化 目录 #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 广播机制核心算法&#xff1a;维度扩展的数学建模 目录/提纲 #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官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ 1.2 K8S核心特性 服务发现与负载均衡&#xff1a;无需修改你的应用程序即可使用陌生的服务发现机制。存储编排&#xff1a;自动挂载所选存储系统&#xff0c;包括本地存储。Secret和…...

系统URL整合系列视频二(界面原型)

视频 系统URL整合系列视频二&#xff08;界面原型&#xff09; 视频介绍 &#xff08;全国&#xff09;大型分布式系统Web资源URL整合需求界面原型讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格&#xff0c;控制粒度也越来越细。安全级别提高的同时也增加…...

虚幻浏览器插件 UE与JS通信

温馨提示&#xff1a;本节内容需要结合插件Content下的2_Communication和Resources下的sample.html 一起阅读。 1. UE调用JS 1.1 JS脚本实现 该部分共两步: 导入jstote.js脚本实现响应函数并保存到 ue.interface 中 jsfunc 通过json对象传递参数&#xff0c;仅支持函数名小…...

OpenAI深夜反击:o3-mini免费上线,能否撼动DeepSeek的地位?

还在为寻找合适的 AI 模型而烦恼吗&#xff1f;chatTools 平台为您精选 o1、GPT4o、Claude、Gemini 等顶尖 AI 模型&#xff0c;满足您不同的 AI 应用需求。立即体验强大的 AI 能力&#xff01; 深夜反击&#xff0c;OpenAI祭出o3-mini 在DeepSeek异军突起&#xff0c;搅动AI行…...

Golang 应用的 Docker 部署方式介绍及使用详解

本文将介绍如何使用 Docker 部署一个基于 Go 语言的后台服务应用 godco&#xff0c;并介绍如何配置 MongoDB 数据库容器的连接&#xff0c;确保应用能够成功启动并连接到容器方式部署的mongoDB数据库。 前提条件 1.已安装 Docker/Podman 2.已安装 MongoDB 数据库容器&#xff…...

deep seek R1本地化部署及openAI API调用

先说几句题外话。 最近deep seek火遍全球&#xff0c;所以春节假期期间趁着官网优惠充值了deep seek的API&#xff0c;用openAI的接口方式尝试了下对deep seek的调用&#xff0c;并且做了个简单测试&#xff0c;测试内容确实非常简单&#xff1a;通过prompt提示词让大模型对用…...

目录中不显示标题中间的软换行符Shift+Enter

文档中的标题过长时&#xff0c;通常使用ShiftEnter软换行符来给标题在合适的位置换行&#xff0c;以实现美观的排版效果。然而&#xff0c;插入软换行符会造成自动产生的目录中标题文本中间出现空格&#xff0c;如图所示&#xff1a;那么&#xff0c;如何让目录中不显示这个软…...

火山引擎语音合成SDK实战:从快速调用到高级参数调优

1. 火山引擎语音合成SDK初体验 第一次接触火山引擎的语音合成SDK时&#xff0c;我正为一个智能客服项目发愁。客户要求系统能够用不同音色、不同情感的语音播报订单状态&#xff0c;而市面上大多数TTS服务要么太贵&#xff0c;要么效果生硬。直到同事推荐了火山引擎的解决方案&…...

Vue3+Element Plus+Sortable.js:构建可定制化表格拖拽配置中心

1. 为什么需要表格拖拽配置中心 后台管理系统中最常见的需求之一就是表格展示数据。但不同用户对表格的展示需求往往不同&#xff1a;产品经理可能更关注日期和状态字段&#xff0c;运营人员则更看重用户行为和转化数据。传统解决方案是开发多个固定表格页面&#xff0c;但这会…...

FPGA实战:手把手教你用Vivado的MMCM IP核动态调整ADC采样时钟相位(附仿真避坑指南)

FPGA实战&#xff1a;Vivado MMCM动态相位调整的工程化实现与深度避坑指南 在高速数据采集系统中&#xff0c;ADC采样时钟相位的精确控制往往是决定信号完整性的关键因素。当FPGA工程师发现采样数据存在周期性抖动或眼图闭合时&#xff0c;动态调整时钟相位便成为优化系统性能的…...

OpCore-Simplify:开源系统硬件适配的技术突破与架构革新

OpCore-Simplify&#xff1a;开源系统硬件适配的技术突破与架构革新 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在开源系统定制领域&#xff0c;硬…...

掌握ModTheSpire:从入门到精通的开源模组加载工具实战指南

掌握ModTheSpire&#xff1a;从入门到精通的开源模组加载工具实战指南 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire 认知铺垫&#xff1a;走进模组加载的技术世界 当你第一次尝试为…...

告别重复造轮子:用快马AI一键生成可配置的魔鬼面具UI组件库

作为一个经常需要处理各种UI组件的前端开发者&#xff0c;最近在做一个万圣节主题项目时&#xff0c;遇到了一个有趣的挑战&#xff1a;需要快速开发一套可配置的魔鬼面具组件库。传统手动编码方式不仅耗时&#xff0c;而且难以应对多风格需求。幸运的是&#xff0c;我发现了In…...

迪文串口屏通信协议详解:从5AA5帧头到变量地址,一篇看懂HEX指令怎么发

迪文串口屏通信协议逆向解析&#xff1a;从帧头到数据域的HEX指令全解构 第一次拿到迪文串口屏的HEX指令时&#xff0c;那一串5A A5 11 82 0001 BFAA C6F4...让我完全摸不着头脑。为什么有的指令长度固定&#xff0c;有的却变化多端&#xff1f;地址字段和数据字段究竟如何划分…...

在QT中将多个项目(同代码不同ui和资源文件)合并

Linux下的qt环境 我现在有三个项目&#xff0c;代码一模一样&#xff0c;只有UI文件和资源文件不同现在想要合并代码 后期好上传在git 仅需要一个分支 更好管理将随行 康养 采图三个项目代码合并 思路是这样的 将每个项目都分类打包区分开我是在康养这个项目的基础上合…...

Qwen-Ranker Pro快速部署:Windows WSL2环境下Streamlit兼容性方案

Qwen-Ranker Pro快速部署&#xff1a;Windows WSL2环境下Streamlit兼容性方案 1. 环境准备与系统要求 在Windows WSL2环境中部署Qwen-Ranker Pro需要确保系统满足以下基本要求&#xff1a; 硬件要求&#xff1a; 内存&#xff1a;至少8GB RAM&#xff08;推荐16GB以上&…...