📅  最后修改于: 2023-12-03 15:07:27.436000             🧑  作者: Mango
在 Python 中,有时候我们需要对一个函数进行不同的调用方式,例如传入不同的参数来进行处理,这时候就需要用到可选参数了。
Python 的函数可以接收任意数量的参数,这些参数可以分为两大类:必需参数和可选参数。必需参数指的是函数定义时必须要传入的参数,而可选参数是指在函数调用时可以不传入的参数。
在 Python 中,我们可以通过在函数的参数列表中添加默认值来实现可选参数。
def print_info(name, age=18, gender='男'):
print(f'姓名:{name},年龄:{age},性别:{gender}')
print_info('张三') # 姓名:张三,年龄:18,性别:男
print_info('李四', 20) # 姓名:李四,年龄:20,性别:男
print_info('王五', gender='女') # 姓名:王五,年龄:18,性别:女
在上面的示例中,我们定义了一个 print_info
函数,其接收一个必需参数 name
和两个可选参数 age
和 gender
。如果在调用函数时不传入 age
和 gender
参数,则会使用默认值。
在调用函数时,我们可以不按照参数列表的顺序传入参数,只需要在传入参数时将参数名和值用等号连接即可,例如在第三个示例中,我们先传入了必需参数 name
,再传入了可选参数 gender
。
需要注意的是,在定义函数时,必需参数必须在可选参数之前,否则会引发语法错误。
def print_info(age=18, name, gender='男'): # 报错:SyntaxError: non-default argument follows default argument
print(f'姓名:{name},年龄:{age},性别:{gender}')
同时,还需要注意的是,参数默认值只会在函数定义时进行一次赋值。如果可选参数是可变类型(例如列表、字典等),则会因为多次调用函数导致参数值累加。
def print_list(a, b=[]):
b.append(a)
print(b)
print_list(1) # [1]
print_list(2) # [1, 2]
print_list(3) # [1, 2, 3]
在上述示例中,我们定义了一个函数 print_list
,其接收一个必需参数 a
和一个可选参数 b
,默认值为空列表。每次调用函数时,我们向参数 b
中添加一个元素 a
,然后输出整个列表。但是由于参数默认值只会在函数定义时进行一次赋值,第二次调用函数时默认值已经被赋值为 [1]
,因此会输出 [1, 2]
。
为了避免这类问题,我们可以使用 None 来代替空可变类型作为参数的默认值,并在函数内部判断参数是否为 None,需要时在函数内部创建一个新的空列表或字典。