一直好奇函数定义里的*args *kwargs是怎么实现的, 查阅资料后自己写了一个例子. 注意一下这里 pKeys=list(para.keys()) , 字典的keys返回类型是 dict_list, 必须用list()进行转换,否则不能调用.
注意 *args和 *kwargs 必须放最后, 要不提示语法错误
# 动态参数
def TuplePara_add(*args):
''' 只用元祖做参数'''
result = args[0]+args[1]
return result
def DictPara_add(**args):
''' 只用字典做参数'''
return args["x"] + args["y"]
def dict_tuple_mixed_para(*args,**kwargs):
''' 元祖与字典混合参数 '''
para={'x':0 , 'y':0 , 'z':0}
pKeys=list(para.keys())
if args:
for i in range(0,len(args)):
KeyStr= pKeys[i]
para[KeyStr] = args [i]
if kwargs:
kwKeyList= list(kwargs.keys())
for i in range (0, len(kwargs)):
KeyStr = kwKeyList[i]
para[KeyStr] = kwargs [KeyStr]
print(f'元祖与字典混合输入参数 x:{para["x"]} y:{para["y"] } z:{ para["z"]}')
return para['x'] + para['y'] + para['z']
if __name__ == "__main__":
print(f"Tuple参数函数返回:{TuplePara_add(2,3)}")
print(f"字典参数函数返回: { DictPara_add(x=6,y=9)}")
print(f'混合参数一:{dict_tuple_mixed_para(5,9,z=12)}') # 显示 x,y,z 的值
print(f'混合参数二:{dict_tuple_mixed_para(5,9,x=12)}') # 只显示 x,y 的值
# print(f'混合参数三:{dict_tuple_mixed_para(x=5,9,12)}') # 语法错误
返回结果
Tuple参数函数返回:5
字典参数函数返回: 15
元祖与字典混合输入参数 x:5 y:9 z:12
混合参数一:26
元祖与字典混合输入参数 x:12 y:9 z:0
混合参数二:21