欢迎访问宙启技术站
智能推送

Python中的可变长参数与关键字参数是什么?

发布时间:2023-05-26 18:46:57

Python中的可变长参数和关键字参数都是用于定义函数时传递参数的一种方式。可变长参数是指可以传递任意数量的参数,而关键字参数是指将参数传递给函数时使用关键字进行标识。

可变长参数

Python中可以使用*args和**kwargs两种方式定义可变长参数。其中*args用于传递任意数量的位置参数,而**kwargs用于传递任意数量的关键字参数。

*args

当函数需要接收任意数量的位置参数时,可以使用*args。在函数定义中,可以在参数名前加一个*符号,这样,所有传递给这个函数的位置参数都会被收集到一个元组中。

例如:

def sum(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum(1, 2, 3))  # 输出:6
print(sum(1, 2, 3, 4, 5))  # 输出:15

在上面的例子中,sum()函数接收任意数量的位置参数,这些参数都被收集到了一个元组args中。在函数内部,可以使用for循环遍历这个元组,将所有参数相加得到总和。

**kwargs

当函数需要接收任意数量的关键字参数时,可以使用**kwargs。在函数定义中,可以在参数名前加两个*符号,这样,所有传递给这个函数的关键字参数都会被收集到一个字典中。

例如:

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

print_student_info(name='Tom', age=18, gender='male')
# 输出:
# name : Tom
# age : 18
# gender : male

在上面的例子中,print_student_info()函数接收任意数量的关键字参数,这些参数都被收集到了一个字典kwargs中。在函数内部,可以使用for循环遍历这个字典,将所有参数依次打印出来。

关键字参数

关键字参数是指将参数传递给函数时使用关键字进行标识。在函数定义中,可以将参数名和默认值用=符号连接起来,这样就可以为这个参数指定默认值,并且在调用函数时可以使用关键字来指定这个参数的值。

例如:

def print_info(name, age, gender='unknown'):
    print('name:', name)
    print('age:', age)
    print('gender:', gender)

print_info('Tom', 18)
# 输出:
# name: Tom
# age: 18
# gender: unknown

print_info(name='Jerry', age=20, gender='male')
# 输出:
# name: Jerry
# age: 20
# gender: male

在上面的例子中,print_info()函数接收三个参数,其中gender参数有一个默认值'unknown'。当调用该函数时,可以根据参数位置传递参数,也可以使用关键字来指定参数的值。如果没有指定gender参数的值,则函数会使用默认值'unknown'。

可变长参数和关键字参数的组合使用

在实际使用中,可变长参数和关键字参数经常会结合使用。例如,可以定义一个函数,既可以接收任意数量的位置参数,又可以接收任意数量的关键字参数。

例如:

def print_info(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(key, ':', value)

print_info(1, 2, 3, name='Tom', age=18, gender='male')
# 输出:
# 1
# 2
# 3
# name : Tom
# age : 18
# gender : male

在上面的例子中,print_info()函数使用了*args和**kwargs两种方式定义可变长参数和关键字参数,这样就可以同时接收任意数量的位置参数和关键字参数。在函数内部,可以分别使用for循环遍历args和kwargs,将所有传递的参数依次打印出来。

总结

在Python中,可变长参数和关键字参数分别用于函数定义中接收任意数量的位置参数和关键字参数,它们可以分别使用*args和**kwargs的方式定义。这些参数的使用可以使得函数定义更加灵活,可以根据具体的需求接收任意数量的参数。在实际使用中,可变长参数和关键字参数经常会结合使用,这样就可以同时接收任意数量的位置参数和关键字参数。