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

Python 函数中的默认参数和关键字参数。

发布时间:2023-06-23 19:41:37

Python 的函数中有许多特性可以帮助程序员更灵活地使用函数。其中两个重要的特性是默认参数和关键字参数。

1、默认参数

默认参数是指在定义函数时,给某个参数设置默认值。当函数调用时,如果没有传递该参数,则使用默认值。默认参数的语法格式为:

def func(param1=default_value1, param2=default_value2, …):
    # function body

例如,下面这个函数使用了默认参数。它的功能是计算给定数字列表的平均值,如果没有给定列表,则使用默认列表 [1,2,3] 。

def avg(lst=[1, 2, 3]):
    return sum(lst) / len(lst)

print(avg())  # 输出 "2"
print(avg([2, 3, 4]))  # 输出 "3"

函数调用时可以传递一个新的列表,也可以不传递任何参数,这样会使用默认参数。

但是需要注意的是,当默认参数是可变(例如列表或字典)时,需要小心使用。

def add_item(item, lst=[]):
    lst.append(item)
    return lst

print(add_item(1))  # 输出 [1]
print(add_item(2))  # 输出 [1, 2],而不是预期输出 [2]

这是因为 Python 函数在定义时会将默认参数值存储在内存中,而每次调用函数时都会使用相同的默认参数列表,这样就会累加之前的列表中的数据。

对于这种情况,可以使用不可变类型(例如 None)来作为默认参数值,并在函数内部根据需要创建新对象:

def add_item(item, lst=None):
    if lst is None:
        lst = []
    lst.append(item)
    return lst

print(add_item(1))  # 输出 [1]
print(add_item(2))  # 输出 [2]

2、关键字参数

关键字参数是指在调用函数时,使用形如 param_name=value 的语法来指定参数的值。这样可以省略参数的位置,使得代码更容易阅读和理解。例如:

def print_info(name, age, gender):
    print("Name:", name)
    print("Age:", age)
    print("Gender:", gender)

# 使用位置参数调用函数
print_info("Tom", 18, "male")

# 使用关键字参数调用函数
print_info(name="Tom", age=18, gender="male")

关键字参数也可以和默认参数一起使用。当一个函数的参数列表中有一些有默认值的参数,并且还有一些需要使用关键字参数的参数时,这种混合使用可以极大地提高代码的简洁性和可读性。例如:

def print_info(name, age=18, gender="male"):
    print("Name:", name)
    print("Age:", age)
    print("Gender:", gender)

# 使用位置参数调用函数
print_info("Tom")

# 使用关键字参数调用函数
print_info(name="Tom", gender="female")

传递关键字参数时,如果有多余的参数,则会报错。但是,如果使用 Python3,可以在定义函数时加上 **kwargs 参数,来接收任意个关键字参数。例如:

def print_info(name, age=18, gender="male", **kwargs):
    print("Name:", name)
    print("Age:", age)
    print("Gender:", gender)
    for key, value in kwargs.items():
        print(key, "=", value)

# 使用关键字参数调用函数
print_info(name="Tom", gender="female", hobby="basketball", city="New York")

总结

默认参数和关键字参数是 Python 函数中强大的特性之一,可以帮助程序员更好地控制和管理函数的行为,并使得函数更加灵活和易于使用。理解和运用这些特性可以帮助程序员编写更加高效和优雅的代码。