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

Python函数参数的默认值和可变参数使用方法

发布时间:2023-05-19 03:11:56

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循环输出字典的内容。