参数作为函数调用中传递给函数体的数据,具有多种形式,在函数定义中可分为:普通参数、默认值参数、args参数、kwargs参数,在函数调用中:位置参数、关键字参数。
接下来,该博文叙述上述参数的用法及其特性。
1 普通参数
def Print(line,grid):
print(line.center(grid))
Print('hello word !!!',100)
hello word !!!
当我们需要将输出居中时,我们自然而然想到创建函数方便我们输出。Print函数定义中有俩个普通参数,调用时顺序传入即可(也就是位置参数)。
2 默认参数
def split(line ,delimiter=','):
return line.split(delimiter)
split('I walk , you run , I sorry')
['I walk ', ' you run ', ' I sorry']
当函数调用时某一变量一般不变,不妨在定义时设定其默认值。
3 注意可变对象作为默认参数时引发的异常
def foo(a,item=[]):
item.append(a)
return item
print (foo(1))
print (foo(2))
#正确的写法
def fooo(a,item=None):
if item==None:
item=[]
item.append(a)
return item
print (fooo(2))
print (fooo("fdsfd"))
[1]
[1, 2]
[2]
['fdsfd']
在python中,一切可称为对象。依据可变性,对象分为可变对象和不可变对象,可变对象包含列表、字典,类的对象等等。若想传入一个可变对象,一定要注意上面的情况。
4 位置参数和关键字参数
def fo(a,b,c=1,d=2):
pass
fo(1,2,c=3)
在调用时,形如 b=1 的即为关键字参数,其余的为位置参数。关键字参数位置可随意,但必须传入所有必须的参数(默认参数可选择不传入),可以参照如下原则:
5 args参数
def write(out,fmt,*args):
print(type(args),args)
out.write(fmt%args)
with open ("te.txt","w") as f:
write(f,"%d %s %s",2,"2013","yunge")
(2, '2013', 'yunge')
args参数也称元组参数,因为args在函数体中就是元组。函数调用时,参数一一对应完函数定义中的args参数前的参数(包括普通参数和默认值参数)后,将函数调用中其剩余的除了关键字参数放入args参数,即所有额外的除了关键字参数放入args参数。也就意味着可以接受任意数量的参数。
6 kwargs参数
def f2(a,b,**kwargs):
print(type(kwargs),kwargs)
name=kwargs.pop("name","None")
print (name)
f2(1,2,name="yunge")
{'name': 'yunge'}
yunge
kwargs参数也称字典参数,因为其在函数体中是字典。所有额外的关键字参数放入kwargs字典中,同样可以接受任意数量的关键字参数。
谢谢大家的浏览,
希望我的努力能帮助到您,
共勉!