首先,args和kwargs都不是必须的,它们只是一个变量的名称,命名是约定俗成的,用别的变量名也可以,只有前面的 * 和 ** 是必须的。* 和 ** 两者主要用于定义函数的输入参数,使用了两者,则代表此函数参数可以入一组数据
1、*args的使用
将输入参数打包成功元组(tuple)的形式给函数体使用
例一:
def Tu_args(*args): # 返回args的值及其数据类型 return args, type(args) a = Tu_args(1, 2, 34, 4) print(a)
结果:
有结果可知, *args传递的是一组数据,数据类型是元组
例二:
使用*args传递一组参数,在函数内求和、平均数、乘积
# 求一组数据的平均数、和、积 avg, su, amass = 0, 0, 1 # 定义三个变量,用于保存平均数、和、积 def Read(*args): global avg, su, amass # 声明三个变量为全局变量 for i in args: j = int(i) # 将args里的数据转换成int类型(因为input函数输入的都为str类型),保存于j su += j # 遍历求和,保存于su amass *= j # 遍历求积,保存为amass avg = su / len(args) # 使用求和的结果求平均数,若和求错,即平均数也错误 return '总和:%d' % su, '平均值:%d' % avg, '乘积:%d' % amass # 返回和、平均数、积 if __name__ == '__main__': ff = input('请输入:') # 使用input函数输入的内容均为str类型 f = ff.split(',') # 将输入的数据按 , 切片,保存为f C = Read(*f) # 调用函数Read() print(C)
结果:
2、**kwargs的使用
** kwargs会把输入参数打包成dict给函数体调用
例一:
def dc(**kwargs): return kwargs, type(kwargs) a = dc(ssd=23, sdj=232) # 使用了**kwargs,则代表函数输入的参数需要是字典形式的 print(a)
结果:
例二:
def function(avi, *args, **kwargs): print(avi, args, kwargs) function(33, 23, 43, 45645, 4545, 'kkk', d=23, kk=32, ks='askdjk')
结果:
可见,*args传入的参数会自动打包成元组形式,而**kwargs会要求输入参数带有变量和值,自动打包成字典形式