第一步:分清楚形参和实参
形参的英文名:arguments,简写args
实参的英文名:parameters,简写para
函数定义时,写在函数名后面括号里的就是变量名就是形参;
函数调用时,写在函数名后面括号里的要传给形参的值(value)就是实参。
def add(a, b): # 这里的a,b就是形参。形式参数
return a + b
re = add(1, 2) # 这里的1,2就是实参,实际参数
print(re) # 显示3
第二步:分清楚形参一共有四种形式,分别有
①a,b,c这类位置参数;# 单纯的变量形式存在就叫他位置参数
②a=1,b=2,c=3这类默认参数;# 给变量赋值了就叫他默认参数
③*args可变收集参数;# *woCao666,*mmd这种命名形式的就叫他可变收集参数,变量类型是元组,*是解包符号
④**kwargs关键字可变参数。
在函数定义时,第四种**kwargs必须写在最后面!前面三种类型的形式参数位置可以任意组合:
像下面这样,a是位置参数,c是默认参数,*args是可变参数,**kwargs是关键字可变参数。前三种形式参数的位置可以任意组合,关键字可变参数必须放在最后面,别问为什么,记住就行。
def test(a,c=10,*args,**kwargs):
print(a,c,*args,**kwargs)
def test(a,*args,c=10,**kwargs):
print(a,c,*args,**kwargs)
def test(c=10,a,*args,**kwargs):
print(a,c,*args,**kwargs)
def test(c=10,*args,a,**kwargs):
print(a,c,*args,**kwargs)
def test(*args,a,c=10,**kwargs):
print(a,c,*args,**kwargs)
def test(*args,c=10,a,**kwargs):
print(a,c,*args,**kwargs)
第三步:学会调用函数。
首先,默认参数可以不给他传递实参。
def add(a=10,b):
return a+b
re = add(1)
print(re) # 打印11,这里把1传给b
另外,形参*args会吃掉他之后所有的位置参数:在下面的代码中,*args会吃掉实参1,2,3,4,b和a没有被赋值。
def test(*args, b, a, c=10, **kwargs):
print(a, b, args, kwargs, c)
test(1, 2, 3, 4, key1=5, key2=6)
# TypeError: test() missing 2 required keyword-only arguments: 'b' and 'a'
正确代码如下,在*args后面的位置参数都需要使用关键字参数来赋值。关键字参数就是在调用函数时使用键值对形式赋值,比如add(var1= xxx,var2=xxxx)。
def test(*args, b, a, c=10, **kwargs):
print(a, b, args, kwargs, c)
test(1, 2, b=3, a=4, key1=5, key2=6) # 4 3 (1, 2) {'key1': 5, 'key2': 6} 10
在上图中,没有给c传值,但是打印出c等于10。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)