Python带星号(或*)的函数参数详解
在Python中,我们可以通过在函数定义时使用带星号的参数来接受不定数量的参数,这种参数被称作“星号参数”。其中,单个星号()用于接受不定数量的位置参数,双星号(*)则用于接受不定数量的关键字参数。本文将对这两种星号参数进行详细的讲解。
接受不定数量的位置参数
我们可以在任意一个参数名前面使用单个星号(*)来定义一个函数,这个函数将会接受不定数量的位置参数。
示例一:接受指定数量的位置参数
下面的函数sum_numbers
接受两个位置参数,用于求给定数列中前两个数的和。
def sum_numbers(a, b, *args):
s = a + b
for n in args:
s += n
return s
其中,*args
是接受不定数量位置参数的语法,它将所有传入的位置参数打包成一个元组(tuple)。
我们可以对这个函数进行如下测试:
>>> sum_numbers(1, 2)
3
>>> sum_numbers(1, 2, 3)
6
>>> sum_numbers(1, 2, 3, 4)
10
在这个示例中,当调用sum_numbers(1, 2, 3)
时,args
将为(3,)
,也就是一个包含3的元组;当调用sum_numbers(1, 2, 3, 4)
时,args
将为(3, 4)
,也就是一个包含3和4的元组。我们可以将这个元组视为一个不定长度的列表,进而完成我们所需要的操作。
示例二:结合解包操作使用位置参数
在Python中,可以通过星号操作符将列表或元组解包成不同的元素,使得我们可以将它们传递给接受多个参数的函数。
下面是一个示例,它演示了如何将一个列表中的元素传递给接受不定数量位置参数的函数:
def print_numbers(a, b, c):
print(a, b, c)
my_list = [1, 2, 3]
print_numbers(*my_list)
运行结果为:
1 2 3
在这个示例中,我们将列表my_list
解包成了三个元素,分别传递给了print_numbers
函数的三个参数。我们还可以将元组解包成参数,它的使用类似于列表解包。
接受不定数量的关键字参数
我们可以在任意一个参数名前面使用双星号(**)来定义一个函数,这个函数将会接受不定数量的关键字参数。
示例一:接受不定数量的关键字参数
下面的函数print_user_info
接受不定数量的关键字参数,用于打印用户的个人信息。
def print_user_info(username, age, **kwargs):
print(f"Username: {username}")
print(f"Age: {age}")
print("Additional info: ")
for key, value in kwargs.items():
print(f"{key}: {value}")
其中,**kwargs
用于接受不定数量的关键字参数,它将所有传入的关键字参数打包成一个字典(dict)。
我们可以对这个函数进行如下测试:
>>> print_user_info("Alice", 25, city="New York", occupation="Engineer")
Username: Alice
Age: 25
Additional info:
city: New York
occupation: Engineer
在这个示例中,我们提供了两个关键字参数city
和occupation
作为kwargs
的元素,这些参数可以以字典的形式在函数内部访问。
示例二:结合解包操作使用关键字参数
与位置参数类似,我们也可以使用双星号操作符将字典解包成不同的元素,传递给接受不定数量关键字参数的函数。
下面是一个示例,它演示了如何将一个字典中的元素传递给接受不定数量关键字参数的函数:
def print_user_info(username, age, city, occupation):
print(f"Username: {username}")
print(f"Age: {age}")
print(f"City: {city}")
print(f"Occupation: {occupation}")
my_dict = {"username": "Bob", "age": 30, "city": "San Francisco", "occupation": "Artist"}
print_user_info(**my_dict)
运行结果为:
Username: Bob
Age: 30
City: San Francisco
Occupation: Artist
在这个示例中,我们将字典my_dict
解包成了四个元素,分别传递给了print_user_info
函数的四个关键字参数。我们注意到,虽然字典的元素与函数参数名并不完全匹配,但是解包操作完成了自动关联。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 带星号(* 或 **)的函数参数详解 - Python技术站