如何理解python中的*args和**kwargs

args用于表示可变数量的位置参数(Positional Arguments)

kwargs 用于表示可变数量的关键字参数(Keyword Arguments)。

*args 来接收不定数量的位置参数

实例:

def exampleFunc(*args):
	print(type(args))
	for arg in args:
		print(arg)
		
exampleFunc("123","testArgs","456",789)

输出结果:

<class 'tuple'>
123
testArgs
456
789

exampleFunc函数定义中的 *args 表示该函数可以接受任意数量的位置参数。在函数体内部,我们使用 args 来遍历位置参数元组(传递进来的args是元组类型),并打印每个参数。

**kwargs 来接收不定数量的关键字参数

在函数定义中,**kwargs 表示将传递给函数的关键字参数打包成一个字典。这样,函数在接收到关键字参数时,可以通过字典的方式访问这些参数。
实例:

def exampleFunc(**kwargs):
    for key, value in kwargs.items():
        print(key, value)

exampleFunc(name='Li', age=25, city='New York')

运行结果:

name Li
age 25
city New York

exampleFunc() 函数定义中的 **kwargs 表示该函数可以接受任意数量的关键字参数。在函数体内部,我们使用 kwargs.items() 来遍历关键字参数字典,并打印每个键值对。

应用练习

同时组合使用,这种场景一般在我们定义装饰器的时候经常见到:

def testArgs(*args, **kwargs):
    print(args)
    print(type(args))
    print(kwargs)
    print((type(kwargs))
    
testArgs(21312, 123123, a=12313, b=2)

输出:

(21312, 123123)
<class 'tuple'>
{'a': 12313, 'b': 2}
<class 'dict'>

定义一个计算函数运行的装饰器:

from time import time, sleep


def timmer(func):
    def calcTime(*args, **kwargs):
        startTime = time()
        func(*args, **kwargs)
        endTime = time()
        print('This func used ', endTime - startTime, 's')
        return endTime - startTime
    return calcTime


@timmer
def testTimmer():
    sleep(1)
    

testTimmer()

执行结果:

This func used  1.002957820892334 s

同样的,对于接收不定长参数的函数,我们可以打包入参,函数里的*** 分别进行列表和字典的解包操作,将它们作为函数的参数传递进去。比如:

def add(a, b):
    print(f'{a}+{b} = {a+b}')

tup = (222,333)
dic = {"a": 122, "b": 233}

add(dic["a"], dic["b"])
add(**dic)
add(*tup)

执行结果:

122+233 = 355
122+233 = 355
222+333 = 555

最后,要说明的是,args和kwargs是可以替换成别的字符:

def testArgs(*AAA, **BBB):
    print(AAA)
    print(BBB)


testArgs(21312, 123123, a=12313, b=2)

执行结果 :

(21312, 123123)
{'a': 12313, 'b': 2}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
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
发出的红包

打赏作者

软件测试技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值