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

文章目录

  • Python中`*args`和`**kwargs`的用法
    • `*args`的用法
    • `**kwargs`的用法
    • 使用`*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的数据类型: 
第一个位置参数: 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的数据类型: 
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

你可能感兴趣的:(python开发技巧,python)