python函数中*args和**kwargs的作用和意义

news2025/1/10 1:30:13

一、背景

在使用python编程过程中,项目的完成离不开每个函数的功劳,因此函数就是编程的生命!然而,函数定义中的*args和**kwargs参数会让许多刚接触python的coder不知所措,所以这里讲一下python函数中这两个参数的作用和意义。

二、*args位置参数

*args定义:打包所有的参数到一个元组(tuple),这是非常有用的,因为可以使函数接受任意数量的参数。

注意:args是自定义的,并不是保留字,你也可以使用其他的,但编程人员都约定俗成的使用args表示参数(因为参数的英文单词是:arguments)

不成功的例子:

# *args = parameter that will pack all arguments into a tuple
#  useful so that a function can accept a varying amount of arguments

def add(num1, num2):
    sum = num1 + num2
    return sum

print(add(5,6))

运行上述程序,可以得到结果11。但是如果再添加一个参数,如最后一行改为print(add(5,6,8)),程序则会报错TypeError: add() takes 2 positional arguments but 3 were given,意思是add函数仅能传入两个位置参数,但我们却给了三个。这时,就要用到神奇的*args了。

改进后的例子:

# *args = parameter that will pack all arguments into a tuple
# useful so that a function can accept a varying amount of arguments

def add(*args):
    sum = 0
    for i in args:
        sum += i
    return sum

print(add(5,6,7))

代码解析:定义一个add函数,*args代表可以传入任意多个参数到add函数;令sum=0;开始循环,如果i在参数args内,则执行sum=sum+i操作;返回sum;最后是打印add(5,6,7),结果为18,此时最后一行print中的add函数可以传入任意多个参数。

三、**kwargs关键字参数

同理,kwargs也是可以自定义的,你也可以使用其他的,但编程人员都约定俗成的使用kwargs表示关键字参数(因为关键字参数的英文单词是:keyword arguments), 重要的是前面的两个星号。

**kwargs定义:打包所有的参数到一个字典(dictionary),这是非常有用的,因为可以使函数接受任意数量的关键字参数。此外, **kwargs 只能在参数列表的最后一位,他的后面不能跟任意的参数。def add(a,b,*args,debug=True,**kwargs):

不成功的例子:

# **kwargs = parameter that will pack all arguments into a dictionary
#  useful so that a function can accept a varying amount of keyword arguments

def hello(first, last):
    print("Hello " + first +" " + last)

hello(first = "Li", last= "Ming")

此时程序没问题,输出Hello Li Ming。但如果一个人的名字是三个字,比如叫李小明,便没法正常输出了。这时,就要用到神奇的*kwargs了。

成功的例子:

def hello(**kwargs):

    print("Hello ",end="")
    for key,value in kwargs.items():
        print(value,end="")

hello(first = "Li", middle= "Xiao",last= "Ming")

另外一个**kwargs例子:

# **kwargs = parameter that will pack all arguments into a dictionary
#  useful so that a function can accept a varying amount of keyword arguments

def add(a,b,*args,debug=True,**kwargs):
    result = a+b
    if debug:
        print(args)
    if 'name' in kwargs:
        print(kwargs['name'])
    if 'old' in kwargs:
        print(kwargs['old'])
    for arg in args:
        result += arg
    if debug:
        print(result)
    return result

add(1,2,3,debug=True,name='test',old= 'six')

这个程序很简单,就不解释了,只要清楚一点就可以,*args可以传入任意数量的位置参数,**kwargs可以传入任意数量的关键字参数。

该程序输出结果为:

(3,)
test
six
6

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1040596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

netty快速入门基本用法

1、netty的基本工作流程 在netty中存在以下的核心组件: ServerBootstrap:服务器端启动辅助对象;Bootstrap:客户端启动辅助对象;Channel:通道,代表一个连接,每个Client请对会对应到…

Vue3为什么推荐使用ref而不是reactive

为什么推荐使用ref而不是reactive reactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代option api的data的替代,可以存放任何数据类型,而reactive声明的数据类型只能是对象; 先抛出结论,再详细说原因:非必要不用rea…

医学影像SAM

医学影像SAM 1. 医学影像SAM1.1. MedSAM1.2. SAM-Adapter1.3. Medical-SAM-Adapter1.4. sam-med2d1.5. MS-SAM 下面整理了一些比较好的博客。 1. 医学影像SAM 由于sam在医学影像上表现不是特别好,在该类型数据集上就需要再训练。 1.1. MedSAM MedSAM&#xff1a…

【双塔模型DSSM】的原理与实现

文章目录 简介1 双塔模型的召回结构1.1 样本准备1.2 模型特征1.3 模型loss1.4 线上部署 2 双塔模型的粗排结构2.1 样本准备2.2 模型特征2.3 模型loss2.4 线上部署 参考文章 简介 DSSM 模型总的来说可以分成三层结构,分别是输入层、表示层和匹配层。双塔结构如下图所…

机器学习第十一课--K-Means聚类

一.聚类的概念 K-Means算法是最经典的聚类算法,几乎所有的聚类分析场景,你都可以使用K-Means,而且在营销场景上,它就是"King",所以不管从事数据分析师甚至是AI工程师,不知道K-Means是”不可原谅…

虚拟机安装CentOS 7

一、CentOS7.4下载 官网下载地址:http://vault.centos.org/ 1、进入CentOS下载官网,找到CentOS7.4版本往下滑找到要下载的版本(这里我用的是7.4哈~~) 下载完成之后,由于“CentOS-7-x86_64-DVD-1708.torrent”只是一…

Python 找出最大数

"""在输入的三个数中找出最大知识点:1、条件嵌套语句if/else2.字符串分割函数split()3、列表元素索引4、数据类型转换举一反三:1、如何控制只能输入三个数,否则重新输入2、如何避免输入无效字母"""# 定义一个变…

Cron表达式_用于定时调度任务

一、Cron表达式简介 Cron表达式是一个用于设置计划任务的字符串,该字符串以5或6个空格分隔,分为6或7个域,每一个域代表任务在相应时间、日期或时间间隔执行的规则【Cron表达式最初是在类Unix操作中系统中使用的,但现在已经广泛应用…

三菱PLC位置式PID(梯形图源代码)

PID的算法和公式详细介绍,大家可以查看PID专栏,这里不再展开细述。这篇文章主要给出FX3GA系列位置式PID的梯形图源代码,方便大家学习使用。 位置式PID三菱ST代码 三菱FX3U PLC 位置式PID算法(ST语言)_三菱pid梯形图源代码_RXXW_Dor的博客-CSDN博客三菱PLC自带的PID不必多说…

uniapp:如何修改组件默认样式

日历组件默认样式如下图,但是我不想要右上角的红点,并且日期下面的数字要加红色背景,变成圆形,还是先用元素检查找到元素的类名,然后通过/deep/来覆盖样式,需要注意的是,lang要scss或者less&…

硬件基本功--MOS管

一、上下拉电阻Rgs的作用 Rgs:经验值,一般取10K左右。 1. 上电时给MOS管的栅极一个确定的电平,防止上电时GPIO为高阻态时,MOS管的栅极电平不确定,从而受到干扰。 2. 断电时,如果MOS管是导通的状态&#xff…

北京智和信通亮相2023IT运维大会,共话数智浪潮下自动化运维新生态

2023年9月21日,由IT运维网、《网络安全和信息化》杂志社联合主办的“2023(第十四届)IT运维大会”在北京成功举办。大会以“以数为基 智引未来”为主题,北京智和信通技术有限公司(下文简称:北京智和信通&…

火山引擎边缘云:数智化项目管理助力下的业务增长引擎

近日,“QCon全球软件开发大会2023北京站”、“第十二届中国PMO大会”、“2023第二届中国PMO&PM大会”相继召开,火山引擎边缘云项目管理团队受邀参加,并就项目管理相关主题开展分享。 会上,火山引擎边缘云项目管理负责人申建表…

TS编译器选项​——指定编译后文件所在目录

compilerOptions是TS的编译器选项,主要在tsconfig.json文件中用于对ts编译为js文件时进行配置 "compilerOptions" : { 配置项 } 在tsconfig.json中编写如下代码: {// compilerOptions 编译器选项"compilerOptions": {// outDir 用于…

QT程序打包图片无法正常显示

QT程序打包图片无法正常显示 环境: QT4.8.2VS2017opencv3.416 问题: 本机测试正常,图片可正常显示功能也可正常进行,但打包发送给没有环境数据的电脑上进行测试就会出现图片无法显示的问题。 原因: 并没有找到理论支撑…

投资理财知识分享:100个金融知识专业术语

大家好,我是财富智星,今天跟大家分享一下投资理财知识方面100个金融知识专业术语,希望能帮助大家了解更多金融知识。 1. 股票:代表对一家公司所有权的证券。 2. 债券:公司或政府发行的借款证券。 3. 投资组合&#xff…

AWS SAA 学习过程记录

共通 一些信息已经更新了,但参考题的答案还是旧的。 比如: S3的最大读写性能已经提高到 3,500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD requests per second 并且不再要求使用random prefix Storage Amazon S3 为了提高读取的performance: For exam…

MySQL 笔试——多表连接查询

一、(左、右和全)连接概念 内连接: 假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来。A和B两张表没有主付之分,两张表是平等的。 关键字:inner join on 语句&#xf…

2023-9-25 JZ6 从头到尾打印链表

题目链接:从头到尾打印链表 import java.util.*; /** * public class ListNode { * int val; * ListNode next null; * * ListNode(int val) { * this.val val; * } * } * */ import java.util.ArrayList; public c…

【MySql】2- 基础篇(下)

文章目录 1. MySQL锁1. 1 全局锁1. 2 表级锁1. 3 行锁1. 3 .1 两阶段锁1. 3 .2 死锁和死锁检测 2. 事务是否是隔离的?2.1 快照在MVCC中如何工作 1. MySQL锁 数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合…