在 python 自定义函数中如何实现可变数量的参数呢?这里有两种种方法来实现。

  • 提供参数默认值
  • 使用关键字参数 kwarg

参数默认值

最有用的形式是对一个或多个参数指定一个默认值。这样创建的函数,可以用比定义时允许的更少的参数调用。

比如有打印班级学生信息的一个函数,函数参数包括学生学号、姓名、专业名、班级号和学院名,可以将其中一些信息设置为默认值,例如学院名,这样就可以根据具体情况传递不同数目的参数了。

def student_info(id_num, name, class_name="communication", class_num="1", department="computer"):
print('*'*20)
print(f'id_num = {id_num}')
print(f'name = {name}')
print(f'class_name = {class_name}')
print(f'class_num = {class_num}')
print(f'department = {department}')

student_info(33, 'bob')
student_info(23, 'busyboxs', class_name='software')
student_info(1, 'xiaoming', class_name='conputer', class_num=2)

需要注意的是: 默认值只会执行一次。这条规则在默认值为可变对象(列表、字典以及大多数类实例)时很重要。

例如

def f(num, L=[]):
L.append(num)
return L

print(f(1))
print(f(2))
print(f(3))

其输出结果如下

[1]
[1, 2]
[1, 2, 3]

关键字参数

可以在函数的参数形式中传入 *args**kwargs 形式的参数。*args 表示对元组形式的参数进行解析,**kwargs 表示对字典类型的参数进行解析。对于名字 argskwargs 也可以用其他名字替换,不过通常使用 *args**kwargs

def print_input(required, *args, **kwargs):
print(required)
if args:
print(args)
if kwargs:
print(kwargs)

print_input('hello')
print('*'*20)
print_input('hello', 1, 2, 3)
print('*'*20)
print_input('hello', 1, 2, 3, 4, 5, name = "busyboxs", ID = "26", age = "25")
hello
********************
hello
(1, 2, 3)
********************
hello
(1, 2, 3, 4, 5)
{'name': 'busyboxs', 'ID': '26', 'age': '25'}