函数的形参
函数的缺省参数
语法:
def 函数名(形参名1=默认实参1,形参名2=默认实参2….)缺省参数必须从左至右依次存在
语句
示例:
def info(name, age=1, address=”不详”):
print(“我叫”,name, ‘我今年’,age,岁,’家庭住址’ , 不详)
info(“张飞”,30,”中原”)
info(“赵云”) # 实参不够的时候 自定填充红字
说明:
缺省参数必须从左至右依次存在
缺省参数可以有0个,1个,多个,或全部都有缺省参数
缺省参数的绑定对象存在于函数内,同函数的生命周期一致
示例:
def fn(a, lst=[]):
lst.append(a)
print(lst)
L=[1,2,3,4]
fn(5, L)>>>[1,2,3,4,5]
fn(6,L)>>>[1,2,3,4,5,6]
fn(1)>>>[1]
fn(2)>>>[1,2]
函数的形参定义方式
1. 位置形参
2. 星号元组形参
3. 命名关键字形参
4. 双星号字典形参
位置形参:
def 函数名(形参名1,形参名2,…)
语句块
星号元组形参:
语法:
def 函数名(*元组形参名)
语句跨
作用:
收集多余的位置形参
示例:
def function(*args):
print("实参个数是",len(args))>>>3
print("args的值是:",args)>>>(1,2,3)
func(1,2,3)
func("abc",3.1,2,True)>>>5
类似于print,以元组形式输出>>>("abc",3.1,2,True)
命名关键字形参:
语法:
def 函数名(*, 命名关键字形参):
语句块
或
def 函数名(*args,命名关键字形参):
语句块
作用:
所有的命名关键字形参都强制调用者采用关键字传参或字典关键字传参的方式调用
示例:
def myfun(a,*,k)
print('a',a)
print('k',k)
myfun(100,200) #错误的
myfun(100,k=200) >>>a=100,k=200# k强制使用关键字传参
myfun(10,**{'k':20})>>>a=10,k=20
def myfun2(b,*args,c,d):
print("b=",b)
print("args=",args)
print("c=",c)
print("d=",d)
myfun2(100,200,300,600,c=400,d=500) # c,d强制使用关键字传参
>>> b= 100
args= (200, 300, 600)
c= 400
d= 500
双星号字典形参:
语法:
def 函数名(**字典形参名):
语句块
作用:
收集多余的关键字传参
注:
字典形参名通常叫 kwargs
示例:
def func(**kwargs):
print("关键字传参个数是:",len(kwargs))
print("kwargs",kwargs)
func(name='tarena',age=15)
func(a=1,b='BB',c=[2,3,4],d=True)
>>> 关键字传参个数是: 2
kwargs {'age': 15, 'name': 'tarena'}
关键字传参个数是: 4
kwargs {'d': True, 'a': 1, 'c': [2, 3, 4], 'b': 'BB'}
函数参数说明:
位置形参,缺省参数,星号元组形参,命名关键字形参,双星号字典形参可以混合使用
函数参数自左至右的顺序为:
1. 位置形参
2. 星号元组形参
3. 命名关键字形参
4. 双星号字典形参
示例:
def fn(a,b,*args,c,**kwargs):
print(a,b,args,c,kwargs)
fn(100,200,300,400,*'AB', **{'d':'D'},c=100)
>>>100 200 (300, 400, 'A', 'B') 100 {'d': 'D'}
可以接收任意位置传参和关键字传参的函数:
def fn(*args,**kwargs)
pass