详解Python 函数参数*args和**kwargs

  • Post category:Python

Python 函数参数中有两个特殊的符号:,分别称为 unpacking operators(解包运算符)。其中,args 可以将函数中的多个参数打包成一个 Tuple(不定长位置参数)、**kwargs 可以将函数中的多个关键字参数打包成一个 Dictionary(不定长关键字参数)。

*args的使用方法

args用来接收函数中不定长的位置参数。在函数定义中,args接收的所有位置参数都被打包成一个名为args的tuple元组里,然后通过args元组对位置参数进行操作。

示例一:计算多个数的平均值

def average(*args):
    return sum(args) / float(len(args))

print(average(1,2,3)) # 2.0
print(average(1,2,3,4,5)) # 3.0

示例二:将元组中的值传递给函数

def printer(a, b, c):
    print("a:", a)
    print("b:", b)
    print("c:", c)

t = (1, 2, 3)
printer(*t) # a: 1  b: 2 c: 3

**kwargs的使用方法

kwargs用于接收函数中不定长的关键字参数,即变量名和值的键值对。在函数定义中,kwargs接收的所有关键字参数都被打包成一个名为kwargs的dictionary字典里,然后通过kwargs字典对关键字参数进行操作。

示例一:打印字典中的所有元素

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

print_dict(a=1, b=2, c=3) # a: 1  b: 2 c: 3

示例二:将字典中的值传递给函数

def printer(a, b, c):
    print("a:", a)
    print("b:", b)
    print("c:", c)

d = {'a': 1, 'b': 2, 'c': 3}
printer(**d) # a: 1  b: 2 c: 3

综上所述,使用 args 和 *kwargs 可以在函数定义中接收不定长的位置参数和关键字参数,使得函数的参数更加灵活,适用范围更广。在使用时需要注意根据实际需求来选择使用哪种参数,在处理参数时注意其类型并进行相应的操作。