python中定义方法的参数主要有四种:
1、普通参数:
普通参数非常普遍。
def f1(name, age): print(‘my name is %s, i am %s years old‘ % (name, age))
name和age就是两个普通的参数。在调用方法f1时,一定按照定义时的顺序依次传入name和age两个实参。
f1(‘Andy‘, 21)
2、默认参数:
默认参数是指在定义方法是给某个形式参数一个默认的值。
def f2(name, age, home=‘Shanghai‘): print(‘my name is %s, i am %s years old, i come from %s‘ % (name, age, home))
在调用该方法时,如果不传递实参,则该参数的实参是定义方法时指定的值,如果调用时传递了实参,则这个参数的值就是传递的值。
f2(‘an‘, 21)
>>>my name is an, i am 21 years old, i come from Shanghai
f2(‘an‘, 21, ‘Jiangxi‘)
>>>my name is an, i am 21 years old, i come from Jiangxi
在定义这种方法时一定要把带有默认值的参数放在参数列表的最后。
3. 指定参数
指定参数方法的定义和普通方法无异,在传递实参时不必非得按照定义的参数顺序传递,但是要指定传递的实参是给哪个形参的,其形式如下:
f1(age=21, name=‘an‘)
>>>my name is an, i am 21 years old
4. 可变参数
可变参数的意义是传递的实参个数是没有个数限制的,0个到n个参数都可以。它的形式是:
def calc(*args):
s = 0
for i in args:
s +=i
print(s)
所以我们在调用的时候就可以传入0个或多个实参了,这些参数在函数调用的时候被组装为一个tuple。
calc(1, 2, 3)
如果事先拿到的数据就是一个list或者tuple怎么办呢?我们可以在list或者tuple的的实参前面加上*号把它们转化为可变参数:
num = (3,4,5)
calc(*num)
num2 = [4,5,7]
calc(*num2)
5. 关键字参数:
关键字参数的参数前面有两个*号,可以传递0个或多个参数进去,这些参数在函数调用时被组装成一个dict。
示例中我们可以只传递必须的函数name和age,打印出的kwargs是一个空的dict。
def student(name, age, **kwargs): print(‘name:‘,name,‘age:‘,age, ‘other:‘, kwargs) student(‘小米‘, 15)
>>>name: 小米 age: 15 other: {}
传递多个关键字参数
student(‘小米‘, 15, city=‘Beijing‘, grade=3) name: 小米 age: 15 other: {‘city‘: ‘Beijing‘, ‘grade‘: 3}
如果事先有一个dict的话,我们可以类似与可变参数的传值方式传递实参:
kw = {‘city‘: ‘Beijing‘, ‘grade‘: 3}
student(‘小米‘, 15, **kw)
6.组合参数
组合参数是以上5种形式的不同组合,定义的顺序是:必选参数,默认参数,可变参数和关键字参数。
小结:
在使用默认参数时,参数一定要用不可变对象,使用可变参数会出现错误。
*args传入的是一个tuple。
**kw 传入的是一个dict。