Python中`*args`和`**kwargs`的用法

欢迎关注公众号【Python开发实战】,免费领取Python、PyCharm安装教程和Python学习电子书!

Python中*args**kwargs的用法

首先,不是必须写成*args**kwargs,只有变量前面星号*才是必须的。也可以写成*vars**kwvars,写成*args**kwargs只是一个通俗的命名约定。

*args**kwargs主要用于函数的定义中,可以将任意数量的参数传递给一个函数。即预先并不知道,函数调用时会传递多少个参数,在这样的场景下就需要使用这两个关键字。最常见的使用场景是编写装饰器时使用。

*args的用法

*args:允许将任意数量的位置参数传递给一个函数,在函数内部,args会被转化为元组。

def test_args(f_arg, *args):
    print('args的数据类型:', type(args))
    print('第一个位置参数:', f_arg)
    for arg in args:
        print('通过*args传递的参数:', arg)
        
test_args('linux', 'python', 'web', 'sql')

输出:

args的数据类型: <class 'tuple'>
第一个位置参数: linux
通过*args传递的参数: python
通过*args传递的参数: web
通过*args传递的参数: sql

**kwargs的用法

**kwargs:允许将任意数量的关键字参数传递给一个函数,在函数内部,kwargs被转化为字典。

def test_kwargs(**kwargs):
    print('kwargs的数据类型:', type(kwargs))
    for key, value in kwargs.items():
        print(f'{key} : {value}')    
        
test_kwargs(age=18)

输出:

kwargs的数据类型: <class 'dict'>
age : 18

如果某个函数需要能够同时接受任意数量的位置参数和关键字参数,可以同时使用*args**kwargs
但是需要注意的是参数的位置,*args要放在函数定义中最后一个位置参数后面,**kwargs要放在函数定义中所有参数的最后面,在*args后面仍然可以定义其他参数,但在*args后面定义的参数,函数调用时需使用关键字参数传参。

def any_args1(*args, name, **kwargs):
    print(args)
    print(kwargs)
    print(name)
    
def any_args2(*args, name='lau', **kwargs):
    print(args)
    print(kwargs)
    print(name)
    
any_args1('one', 1, name='lau', two=2)
any_args2('one', 1, two=2)
any_args2('one', 1, name='katie', two=2)

输出:

('one', 1)
{'two': 2}
lau
('one', 1)
{'two': 2}
lau
('one', 1)
{'two': 2}
katie

使用*args**kwargs调用函数

现在来看一下怎样使用*args**kwargs来调用一个函数。

def test_args_kwargs(arg1, arg2, arg3):
    print(f'arg1: {arg1}')
    print(f'arg2: {arg2}')
    print(f'arg3: {arg3}')

首先,使用*args调用函数test_args_kwargs。

args = (3, 'one', 9)
test_args_kwargs(*args)

输出:

arg1: 3
arg2: one
arg3: 9

再使用**kwargs来调用函数test_args_kwargs。

kwargs = {'arg2': 'one', 'arg1': 3, 'arg3': 5}
test_args_kwargs(**kwargs)

输出:

arg1: 3
arg2: one
arg3: 5
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯旋.Lau

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

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

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

打赏作者

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

抵扣说明:

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

余额充值