前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中*args和**kwargs用法解读

python中*args和**kwargs用法解读

作者头像
雷子
发布2023-12-04 11:41:17
1910
发布2023-12-04 11:41:17
举报

很多时候,会有人问到*args和**kwargs,那么如何理解呢?

其实, 并不是必须写成 *args 和 **kwargs,真正在参数传递时起作用的,只有变量前面的 *。你也可以写成 *params 和 **kv_params。也就是说,*args 和 **kwargs 只是一种通俗的写法,但不是必须的。

他们代表着什么呢?

1. * 用于传入的多个参数将按照元组形式存储,是一个元组。

2.** 用于参数前则表示传入的(多个)参数将按照字典的形式存储,是一个字典。

*args 的用法

*args 和 **kwargs 主要在函数定义的时候使用。而 *args 是用来发送一个非键值对的可变数量的参数列表给一个函数。

代码语言:javascript
复制
def argsdemo(parame, *args):
    print("正常的参数:", parame)
    print("*args:", args, "类型:", type(args))
    for arg in args:
        print("通过*args传递的参数:", arg)


argsdemo('python', 'java', '鸿蒙', 'go')

结果展示

代码语言:javascript
复制
正常的参数: python
*args: ('java', '鸿蒙', 'go') 类型: <class 'tuple'>
通过*args传递的参数: java
通过*args传递的参数: 鸿蒙
通过*args传递的参数: go

可以发现,看起来argsdemo函数只接收两个参数,可实际上我们向argsdemo函数传递了四个参数,魔法之处就在于 *args,实际上是 *args 把多个参数组装成了一个元组传递给了argsdemo函数。

**kwargs 的用法

**kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。如果你想要在一个函数里处理一些带名字的参数, 你就要使用 **kwargs

代码语言:javascript
复制
def kwargsdemo(**kwargs):
    print("**kwargs:", kwargs, "类型:", type(kwargs))
    for key, value in kwargs.items():
        print("{0} = {1}".format(key, value))


kwargsdemo(name="leizi", age=3)

结果:

代码语言:javascript
复制
**kwargs: {'name': 'leizi', 'age': 3} 类型: <class 'dict'>
name = leizi
age = 3

**kwargs 把多个参数组装成了一个字典传递给了kwargsdemo函数。

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

代码语言:javascript
复制
def demo_args_kwargs(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)
print("------------")
args = ("python", "java", "go")
# 使用 *args方式
demo_args_kwargs(*args)
print("************")
# 使用 **kwargs方式
kwargs = {"arg2": "java", "arg3": "go", "arg1": "python"}
demo_args_kwargs(**kwargs)

结果:

代码语言:javascript
复制
------------
arg1: python
arg2: java
arg3: go
************
arg1: python
arg2: java
arg3: go

只要一个函数在定义时使用了*args 和 **kwargs 这两个关键字作为参数,就可以增加不定长的参数。

注意。函数的参数应该*args 在 **kwargs前,不然会报错。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • **kwargs 的用法
  • **kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。如果你想要在一个函数里处理一些带名字的参数, 你就要使用 **kwargs
  • 使用 *args 和 **kwargs 来调用函数
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档