Python中的*args和**kwargs

博客主要介绍Python中的*args和**kwargs。通过代码及运行结果说明,函数里可变与不可变数据结构参数属于*args,以key=value键值对形式传入的参数属于**kwargs。还提及若*args前定义了参数,首个参数有对应值,其后到键值对中间部分为*args。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python中的*args和**kwargs

在Python中,如果我们看过Python源码,那么我们一定看到过这两个东西,*args,**kwargs,那么这是什么呢,我们可以来看看下面这样一段代码,以及输出结果,看完之后,你应该就能明白这二者的意思。

 1 import time
 2 from functools import wraps
 3 
 4 def  logger(func):
 5     @wraps(func)
 6     def writeLog(*args,**kwargs):
 7         start_time = time.time()
 8         result = func(*args,**kwargs)
 9         print("这是wrap1")
10         endtime = time.time()
11         name = func.__name__
12         args = [arg for arg in args]
13         info = "[{time}s]({name}->{args},{kwargs})".format(time=round(float(endtime-start_time),6),name=name,args=args,kwargs=kwargs)
14         print(info)
15         return info
16     return writeLog
17 
18 
19 @logger
20 def show(*args,**kwargs):
21 
22     time.sleep(2)
23 
24 if __name__ == '__main__':
25     show("wo","ai",{"1":"2"},d=1,e="gg")
View Code

 运行结果:

从运行结果中,我们可以看到,“wo”,"ai",{"1":"2"}都是属于*args,而d=1和e="gg"则属于**kwargs,这也就是说,函数中所有的参数,不管是字典型还是字符串型等可变与不可变型的数据结构,都是属于*args;但是如果是这种key=value键值对的形式传入的参数,那么这种参数就属于**kwargs。

还有一种情况,就是如果在*args之前已经定义了一个参数,比如:def show(a,*args,**kwargs)

那么第一参数就是a的值,a之后到键值对中间的部分都是*args的,我们来看看运行结果:

posted @ 2019-05-31 12:45 麦田里的守望者_zhg 阅读( ...) 评论( ...) 编辑 收藏
Python 中,`*args` `**kwargs` 是常用的参数传递方式,用于将不定数量的参数传递给函数。 `*args` 是一个特殊的语法,用于在函数定义中接受任意数量的位置参数。当我们在函数定义中使用 `*args` 参数时,Python 会将传递给函数的所有位置参数打包成一个元组,并将该元组赋值给 `args` 变量。这样,我们就可以在函数中使用 `args` 变量来访问所有位置参数。 下面是一个简单的例子,演示如何使用 `*args` 参数接受任意数量的位置参数: ``` def print_args(*args): for arg in args: print(arg) # 调用函数 print_args(1, 2, 3) print_args("hello", "world") ``` 在上面的代码中,我们定义了一个 `print_args` 函数,它接受任意数量的位置参数。在函数中,我们使用 `for` 循环遍历 `args` 元组,并打印每个参数的值。当我们调用 `print_args` 函数时,Python 会将传递给函数的所有位置参数打包成一个元组,并将该元组赋值给 `args` 变量。 `**kwargs` 是另一个特殊的语法,用于在函数定义中接受任意数量的关键字参数。当我们在函数定义中使用 `**kwargs` 参数时,Python 会将传递给函数的所有关键字参数打包成一个字典,并将该字典赋值给 `kwargs` 变量。这样,我们就可以在函数中使用 `kwargs` 变量来访问所有关键字参数。 下面是一个简单的例子,演示如何使用 `**kwargs` 参数接受任意数量的关键字参数: ``` def print_kwargs(**kwargs): for key, value in kwargs.items(): print(f"{key} = {value}") # 调用函数 print_kwargs(a=1, b=2, c=3) print_kwargs(name="Alice", age=25) ``` 在上面的代码中,我们定义了一个 `print_kwargs` 函数,它接受任意数量的关键字参数。在函数中,我们使用 `for` 循环遍历 `kwargs` 字典,并打印每个参数的键值对。当我们调用 `print_kwargs` 函数时,Python 会将传递给函数的所有关键字参数打包成一个字典,并将该字典赋值给 `kwargs` 变量。 需要注意的是,`*args` `**kwargs` 可以同时在函数定义中使用,以接受任意数量的位置参数关键字参数。在这种情况下,`*args` 必须放在 `**kwargs` 之前。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值