Python中函数传递参数的形式包含多种,可根据情况而定使用哪种方式。基本所有语言都有简介明了的语法去替代繁琐的代码,优雅的写法不仅能提升代码美观,更能提高提高开发效率,让代码更加易读。
位置传递,默认参数
位置传参须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
函数参数必须传递,否则会报错。
>>> def get_name(name):
>>> print('name:%s' % name)
>>> get_name()
Traceback (most recent call last):
File "test.py", line 4, in
get_name()
TypeError: get_name() missing 1 required positional argument: 'name'
这种情况可以通过默认参数来避免
>>> def get_name(name='tom'):
>>> print('name:%s' % name)
>>> get_name()
name:tom
这种传参方式有一个弊端,如果参数过多需要挨个排列,不必要的参数也需要列出来,通过关键词传参可以解决这个弊端。
关键词传参
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
>>> def get_name(name='tom', age=25, height=180, weight=70):
>>> print('他的名字叫 %s,今年 %s 岁,身高 %s 厘米,体重 %s 公斤。' % (name, age, height, weight))
>>> get_name(age=30)
这种方式可以通过参数名的方式按需传递参数,不必要的参数可以省略使用默认是。
不定长参数
在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。
这个时候我们可以在函数参数前加加一个 * ,表示这个实参个数不定,可能为0个也可能为n个。不管传递多少参数,都会根据位置合并成一个元组(tuple
>>> def get_name(*name):
>>> print(name)
>>> get_name('tom', 'dog', 'mouse')
('tom', 'dog', 'mouse')
还有一种方式是添加两个 *,也可以实现不定长传参,最终会根据位置何合并成一个字典。
>>> def get_name(**params):
>>> print(params)
>>> get_name(name='tom', age=20)
{'name': 'tom', 'age': 20}
这种方式传递参数必须指定参数名,否则会报错。
以上几种方式可以混合使用,根据实际情况,选择适合的方式。