Python函数参数传递与默认参数的使用
Python中函数参数的传递方式有三种,分别是位置参数、关键字参数和默认参数。其中,默认参数是指在定义函数时,给某一参数指定一个默认值,如果调用函数时没有给此参数赋值,则使用默认值。
下面,我将详细介绍使用默认参数的注意事项以及如何在函数中正确使用默认参数。
1. 默认参数的定义
在定义函数时,可以为函数的某些参数指定默认值。默认值可以是任何Python对象,包括数字、字符串、列表、字典、元组等。语法格式如下:
def function_name(parameter1, parameter2=default_value):
示例代码如下:
def greet(name, message='Hello'):
print(message, name + '!')
greet('Jack')
greet('Mary', 'Hi')
在上面的代码中,函数greet有两个参数,其中message为默认参数,如果不给message参数传递值,则会使用函数定义时的默认值(即'Hello')。如果给message参数传递值,则会覆盖默认值。
2. 默认参数的注意事项
在使用默认参数时,需要注意以下事项:
(1)当默认参数的值是可变对象时,每次函数调用时,会共享指针,如果对该对象进行修改,则会影响下一次函数调用。
示例代码如下:
def add_item(item, items=[]):
items.append(item)
return items
print(add_item(1)) # 输出[1]
print(add_item(2)) # 输出[1, 2]
这是因为,在 次调用函数时,会为items参数创建一个空列表,然后将1添加到该列表中,并返回[1]。在第二次调用函数时,会使用上一次函数调用时创建的那个列表(此时已经包含了1),然后将2添加到该列表中,并返回[1,2]。
解决方法是在函数内部创建新的列表对象作为默认参数的值,而不是使用可变的默认参数:
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item(1)) # 输出[1]
print(add_item(2)) # 输出[2]
(2)默认参数必须放在非默认参数之后
示例代码如下:
def greet(message='Hello', name):
print(message, name + '!')
greet('Jack') # 报错
在函数定义时,必须先给非默认参数(如果有的话)传递值,才能给默认参数传递值。
3. 使用默认参数的示例
以下是一个使用默认参数的完整示例代码,其中函数print_person_info接受三个参数:姓名(必须提供的位置参数)、年龄(默认参数)、身高(默认参数):
def print_person_info(name, age=18, height='165cm'):
print('Name:', name)
print('Age:', age)
print('Height:', height)
# 调用函数时只给name传递值
print_person_info('Jack')
# 调用函数时给name和age传递值
print_person_info('Tom', 25)
# 调用函数时给name、age和height传递值
print_person_info('Mary', 20, '170cm')
在上面的示例代码中,当调用函数时只传递name参数时,age和height会使用函数定义时指定的默认值,即分别为18和'165cm'。当传递name和age参数时,height会使用函数定义时指定的默认值。当传递所有三个参数时,不会使用任何默认值。
总结:
默认参数使用可以使函数调用更加简单方便,同时它的使用也需要遵循一些规则,尤其是在使用可变的默认参数时,应当小心谨慎。正确使用默认参数能够有效地提高程序的开发效率。
