news 2026/6/10 21:22:17

python函数的参数管理(01)*args和**kwargs

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python函数的参数管理(01)*args和**kwargs

一、说明

python中关于函数的参数带入,有些许迷惑性,本文专门针对*args 和**kwargs形式参数的应用规矩做出一个简要说明。

二、多参数传递*args 和 **kwargs

args(arguments的缩写)在编程中,尤其是在Python里,是用来接收任意数量的位置参数的,它将这些参数收集到一个元组(tuple)中;对应的,**kwargs(keyword arguments的缩写)用于接收任意数量的关键字参数,将它们收集成一个字典(dictionary);两者主要用于函数定义,实现参数的灵活传递,*args必须放在**kwargs之前。

2.1 先看*args 的用法

*args 的用法(位置参数)

目的: 当函数接受的参数数量不固定,或者一个、或者N个时使用。
形式:args 中的 args 可以是任何名字,但星号 * 是必须的。
接收方式: 将传入的非关键字参数打包成一个元组(tuple)。
示例1:单独应用args

def my_function(*args): print(type(args)) # <class 'tuple'> print(args) my_function(1, 'hello', True)

输出:

# <class 'tuple'> # (1, 'hello', True)

示例2: 用args和其它参数混合使用*

注意,单独的参数放在*args的前面,这是规定

def test_var_args(f_arg, *argv): print("first normal arg:", f_arg) for arg in argv: print("another arg through *argv:", arg) test_var_args('yasoob', 'python', 'eggs', 'test')

这会产生以下结果:

first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv: test

2.2 再看**kwargs的用法

对于*args 和 **kwargs,首先让我告诉你,没有必要写 *args 或 **kwargs。只有 *(星号)是必需的。您也可以编写 *var 和 **vars。编写 *args 和 **kwargs 只是一种约定。

1示例:用 **kwargs参数

**kwargs 允许您将关键字可变长度的参数传递给函数。如果你想在函数中处理命名参数,你应该使用 **kwargs。这是一个让您继续使用它的示例:

def greet_me(**kwargs): for key, value in kwargs.items(): print("{0} = {1}".format(key, value)) greet_me(name="yaso",age="44",salary=1900)

运行结果:
name = yaso
age = 44
salary = 1900

因此,您可以看到我们如何在函数中处理关键字参数列表。这只是 **kwargs 的基础知识,您可以看到它有多么有用。现在让我们谈谈如何使用 *args 和 **kwargs 调用带有参数列表或字典的函数。

2.3 函数定义为常规参数,用 *args 和 **kwargs 做形参

所以在这里我们将看到如何使用 *args 和 **kwargs 调用函数。只要考虑你有这个小功能,注意函数【定义-调用】之间的区别:

def test_args_kwargs(arg1, arg2, arg3): print("arg1:", arg1) print("arg2:", arg2) print("arg3:", arg3)

现在您可以使用 *args 或 **kwargs 将参数传递给这个小函数。这是如何做到的:

#用 *args调用 args = ("wu'shui", 3, 5) test_args_kwargs(*args)

结果:
arg1: wushui
arg2: 3
arg3: 5

#用 **kwargs调用:

kwargs = {“arg3”: 3, “arg2”: “two”, “arg1”: 5}
test_args_kwargs(**kwargs)
结果如下:
arg1: 5
arg2: two
arg3: 3

2.4 使用 fargs ,*args, **kwargs 和的顺序

所以如果你想在函数中使用所有这三个,那么顺序是

some_func(fargs, *args, **kwargs)

三、应用时机

这取决于你的要求是什么。最常见的用例是制作函数装饰器。此外,它也可以用于猴子修补。猴子补丁意味着在运行时修改一些代码。假设您有一个带有名为 get_info 的函数的类,该函数调用 API 并返回响应数据。如果我们想测试它,我们可以用一些测试数据替换 API 调用。例如:

import someclass # api function def client_info( arg1,arg2 ): print("outside!") class someclass def get_info(self, *args): return "Test data" someclass.get_info = client_info

此处,someclass一侧可以调用一个外部函数,参数也能传递。我相信您也可以想到其他一些用例。

猴子补丁:是程序在本地扩展或修改支持系统软件的一种方式(仅影响程序的运行实例),可以理解为动态补丁。

四、后记

相信您已经基本掌握了*args,**kwargs的用法。在参数管理中,有一个更加奇特的方式,那就是argparse,我们将在续文中说明。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 18:01:28

小白也能懂:RMBG-2.0背景移除全流程解析

小白也能懂&#xff1a;RMBG-2.0背景移除全流程解析 你是不是也遇到过这些情况—— 电商上架商品&#xff0c;得花半小时用PS抠图&#xff0c;发丝边缘还毛毛躁躁&#xff1b; 设计师赶海报 deadline&#xff0c;客户临时要换三版背景&#xff0c;手忙脚乱重做蒙版&#xff1b…

作者头像 李华
网站建设 2026/6/10 19:15:36

MAI-UI-8B企业级应用:客服中心智能助手方案

MAI-UI-8B企业级应用&#xff1a;客服中心智能助手方案 1. 为什么需要MAI-UI-8B作为客服中心智能助手 在当今数字化服务场景中&#xff0c;企业客服系统正面临三大核心挑战&#xff1a;用户咨询量激增带来的响应压力、多渠道&#xff08;网页、APP、小程序&#xff09;交互的…

作者头像 李华
网站建设 2026/6/10 14:48:37

Hunyuan-MT-7B多语言翻译效果展示:33种语言互译实例

Hunyuan-MT-7B多语言翻译效果展示&#xff1a;33种语言互译实例 1. 翻译能力的直观感受&#xff1a;从第一眼就惊艳 第一次看到Hunyuan-MT-7B的翻译结果时&#xff0c;我下意识地停顿了几秒——不是因为看不懂&#xff0c;而是因为太自然了。它不像传统机器翻译那样生硬地逐字…

作者头像 李华
网站建设 2026/6/10 14:40:21

小白必看:BGE Reranker-v2-m3本地部署与使用全指南

小白必看&#xff1a;BGE Reranker-v2-m3本地部署与使用全指南 1. 为什么你需要这个工具&#xff1f;——从“搜得到”到“排得准”的关键一步 1.1 你是不是也遇到过这些情况&#xff1f; 向量检索返回了10条结果&#xff0c;但真正有用的只有一两条&#xff0c;其余全是关键…

作者头像 李华
网站建设 2026/6/10 14:43:11

SiameseUIE科研数据挖掘:学术实体关系抽取

SiameseUIE科研数据挖掘&#xff1a;学术实体关系抽取 如果你是一名研究生&#xff0c;或者正在从事科研工作&#xff0c;每天面对海量的学术论文&#xff0c;是不是常常感到无从下手&#xff1f;想了解某个领域有哪些大牛、他们都在哪些机构、研究热点是什么&#xff0c;往往…

作者头像 李华
网站建设 2026/6/10 15:36:10

手把手教你用vLLM玩转GLM-4-9B-Chat多轮对话

手把手教你用vLLM玩转GLM-4-9B-Chat多轮对话 1. 为什么选GLM-4-9B-Chat vLLM这个组合 你可能已经听说过GLM系列模型——智谱AI推出的中文大模型家族&#xff0c;而GLM-4-9B-Chat正是其中最新、最实用的开源版本。它不是简单地“更大”&#xff0c;而是真正解决了实际使用中的…

作者头像 李华