Python函数参数的默认值和可变参数使用方法
Python的函数参数可以设置默认值,调用函数时如果没有传入该参数的值就会使用默认值。同时,Python还支持可变参数,即传入不定数量的参数。接下来我们来具体讲解这两种用法。
1. 默认参数
1.1 手写一个有默认值的函数
我们可以通过下面的示例来了解默认参数的用法。
def say_hello(name='world'):
print('Hello, ' + name + '!')
say_hello() # 输出:Hello, world!
say_hello('David') # 输出:Hello, David!
在上面的示例中,我们定义了一个名为say_hello的函数,其中的name参数设置了默认值为'world'。然后我们对该函数进行两次调用, 次没有传递参数,第二次传递了参数'David'。由于 次没有传递参数,所以函数使用了设置的默认值'world',输出了'Hello, world!'。第二次传递了参数'David',所以输出了'Hello, David!'。
1.2 默认参数的注意点
请注意以下几点:
* 如果函数的某个参数有默认值,则该参数后的所有参数都必须有默认值。
* 如果函数定义中有位置参数和关键字参数时,位置参数必须在关键字参数之前,因为位置参数是按照顺序传递的。
下面是一个关键字参数在位置参数之前的示例:
def describe_person(name, age=18, sex='male'):
print(f"I am {name}, {age} years old, and {sex}.")
describe_person('David') # 输出:I am David, 18 years old, and male.
describe_person('Lucy', sex='female') # 输出:I am Lucy, 18 years old, and female.
describe_person(age=22, name='Tom', sex='male') # 输出:I am Tom, 22 years old, and male.
2. 可变参数
可变参数即传入不定数量的参数。Python中有两种可变参数类型,分别为*args和**kwargs。
2.1 *args
*args用于传递任意数量的位置参数,下面是一个使用*args的示例。
def add_up(*nums):
sum = 0
for num in nums:
sum += num
return sum
print(add_up(1, 2, 3)) # 输出:6
print(add_up(1, 2, 3, 4, 5)) # 输出:15
print(add_up(2.5, 3.9, 4.1, 5.2)) # 输出:15.7
在上面的示例中,我们定义了一个函数add_up,该函数使用了*nums的形式来接收任意数量的位置参数(可以为整数、浮点数等),然后对这些参数进行求和后返回结果。
2.2 **kwargs
**kwargs用于传递任意数量的关键字参数,下面是一个使用**kwargs的示例。
def describe_person(**info):
print("Personal Information:")
for key, value in info.items():
print(f"{key}: {value}")
describe_person(name='David', age=22, sex='male')
"""
输出:
Personal Information:
name: David
age: 22
sex: male
"""
在上面的示例中,我们定义了一个函数describe_person,该函数使用了**info的形式来接收任意数量的关键字参数。**info会将关键字参数存储到一个字典中,然后可以使用字典的items()方法来遍历字典并输出其内容。
2.3 *args和**kwargs混合使用
*args和**kwargs可以一起用,下面是一个混合使用的示例。
def describe_person(name, **info):
print(f"Personal Information of {name}:")
for key, value in info.items():
print(f"{key}: {value}")
describe_person('David', age=22, sex='male')
"""
输出:
Personal Information of David:
age: 22
sex: male
"""
在上面的示例中,我们定义了一个函数describe_person,该函数既有一个位置参数name,也有一个**info参数。**info可以接收任意数量的关键字参数,并将它们存储到一个字典中。最后我们使用for循环输出字典的内容。
