Python中*args与**kwargs的使用详解

季宁
季宁
发布时间:2026-10-12| 4人浏览过
原创

本文详细介绍Python函数中*args和**kwargs的使用方法。*args用于接收任意数量的非关键字参数,以元组形式存储;**kwargs用于接收任意数量的关键字参数,以字典形式存储。文章通过具体代码示例演示了如何定义、调用及解包这些参数,帮助开发者灵活处理函数输入。

本文介绍Python函数中可变参数*args与**kwargs的基本概念。

*args代表接收任意多个无名参数,在函数内部以元组(tuple)的形式存在。

**kwargs代表接收关键字参数,在函数内部以字典(dict)的形式存在。

相关测试代码如下:

def foo(*args,**kwargs): print 'args=',args print 'kwargs=',kwargs print '**********************' if __name__=='__main__': foo(1,2,3) foo(a=1,b=2,c=3) foo(1,2,3,a=1,b=2,c=3) foo(1,'b','c',a=1,b='b',c='c')

代码执行结果如下:

args= (1, 2, 3) kwargs= {} **********************
args= () kwargs= {'a': 1, 'c': 3, 'b': 2} **********************
args= (1, 2, 3) kwargs= {'a': 1, 'c': 3, 'b': 2} **********************
args= (1, 'b', 'c') kwargs= {'a': 1, 'c': 'c', 'b': 'b'} **********************

补充说明:深入理解Python中的**kwargs和*args。

在Python开发中,经常遇到**kwargs和*args这两个参数,例如在groupby函数的定义中。

那么它们具体代表什么含义呢?

在实际开发中应如何正确使用?

DataFrame.groupby(by=None, axis=0, level=None, as_index= True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)

解析**kwargs和*args的含义。

*args和**kwargs通常用于函数定义阶段。它们的核心意义在于允许定义的函数接收任意数量的参数。也就是说,在函数被调用之前,我们无需预先知道也不限制将来函数可以接收的参数数量。在这种场景下,可以使用*args和**kwargs来灵活处理参数。

*args的具体使用场景。

*args用于表示函数接收可变长度的非关键字参数列表作为输入。我们可以通过以下示例进一步理解*args的工作机制。

def test_args(normal_arg, *args):
 print("first normal arg:" + normal_arg)
 for arg in args:
  print("another arg through *args :" + arg)
test_args("normal", "python", "java", "C#")

上述代码的执行结果如下:

first normal arg: normal
another arg through *args : python
another arg through *args : java
another arg through *args :C#

**kwargs的具体使用场景。

**kwargs表示函数接收可变长度的关键字参数字典作为输入。当我们需要函数接收带有关键字的参数时,应当使用**kwargs。我们可以通过以下示例进一步理解**kwargs的工作机制。

def test_kwargs(**kwargs):
 if kwargs is not None:
  for key, value in kwargs.iteritems():
   print("{} = {}".format(key,value))
  # Or you can visit kwargs like a dict() object
  # for key in kwargs:
  # print("{} = {}".format(key, kwargs[key]))
test_kwargs(name="python", value="5")

上述代码的执行结果如下:

name = python
value = 5

以上示例仅展示了*args和**kwargs的基本用法。下面再给出一个利用*args和**kwargs来定义能够接收列表输入和字典输入的函数的例子。

使用*args和**kwargs来调用函数。

假设我们有如下接收普通输入参数的函数定义:

def normal_func(arg1, arg2, arg3):
 print("arg1: " + arg1)
 print("arg2: " + arg2)
 print("arg3: " + arg3)
normal_func("python", 1, 3)

使用*args和**kwargs来调用该函数的代码如下:

# 使用*args
args_list = ("python", 1, 3)
normal_func(*args_list)
# 使用**kwargs
kwargs_dict = {"arg3": 3, "arg1": "python", "arg2": 1}
normal_func(**kwargs_dict)

上述三段代码的输出结果均为:

arg1: python
arg2: 1
arg3: 3

内容汇总。

*args和**kwargs都涉及定义函数时内部参数数量的问题,不指定具体数量,而是依据使用时具体情况临场确定参数数量。

*args针对非关键字参数,**kwargs针对关键字参数。

*args和**kwargs不仅在定义函数时有用,还可以作为函数实际调用时的参数进行解包使用。

以上为个人经验分享,希望能给大家一个参考,也希望大家多多支持本站。如有错误或未考虑完全的地方,望不吝赐教。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。