Python函数——函数参数和默认参数
函数是一段可以重复使用的代码块,用于执行特定任务。在Python中,函数的定义以def关键字开始,后面跟着函数名和一对圆括号。函数还可以接受参数,这些参数是函数在执行时所需要的输入。
函数参数分为两种类型:位置参数和关键字参数。位置参数是按照定义时的顺序进行匹配的,而关键字参数是基于参数名的匹配。
在函数定义中,可以为参数提供默认值。这些默认值可以在函数调用时被忽略,如果忽略则使用默认值,如果提供则使用提供的值。
下面是一个简单的例子,用于演示函数参数和默认参数的使用:
def greet(name, greeting="Hello"):
print(greeting + ", " + name)
在上面的例子中,greet函数接受两个参数:name和greeting。name参数是一个位置参数,而greeting参数是一个关键字参数,并且有一个默认值"Hello"。这意味着在调用函数时,可以省略greeting参数,如果省略,则使用默认值。
greet("Alice") # 输出:Hello, Alice
greet("Bob", "Hi") # 输出:Hi, Bob
在第一个函数调用中,只提供了一个参数,因此使用了默认值。在第二个函数调用中,提供了两个参数,因此使用了提供的值。
函数参数和默认参数的使用可以让函数更加灵活。通过设置默认参数,可以定义一个具有不同功能的函数的变体。
然而,需要注意的是,默认参数应该是不可变的对象,如字符串、数字或元组。这是因为Python在函数定义时只会创建这些默认参数的一份拷贝。如果默认参数是可变的,就可能导致意外的行为。
下面是一个例子,演示可以在函数内部修改默认参数的情况:
def append_to_list(element, my_list=[]):
my_list.append(element)
return my_list
print(append_to_list(1)) # 输出:[1]
print(append_to_list(2)) # 输出:[1, 2]
在上面的例子中,append_to_list函数接受两个参数:element和my_list。my_list是一个关键字参数,它的默认值是一个空列表。
在第一个函数调用中,向my_list中添加了元素1,并返回了结果。在第二个函数调用中,又向my_list中添加了一个元素2,并返回了结果。然而,由于my_list是一个默认参数,默认只会被创建一次,因此第一个函数调用中修改的my_list也会影响到第二个函数调用中。
解决这个问题的方法是将默认参数设置为None,并在函数内部检查参数是否为None。如果为None,则创建一个新的列表。
def append_to_list(element, my_list=None):
if my_list is None:
my_list = []
my_list.append(element)
return my_list
print(append_to_list(1)) # 输出:[1]
print(append_to_list(2)) # 输出:[2]
通过这种方式,可以确保函数的默认参数始终是一个新创建的列表。
