*站在形参和实参的角度进行传输
首先时站在形参的角度进行动态传输:*会将实参传输过来的参数进行聚合,返回一个元组
def func(*args): return args l = ('a','b','c''d'),('aa','bb','cc''dd') l1 = [1,2,3,4,5,[11,22,33]] l2 = ['adsad','艾克',[1,2,3,4],{'s':'alex','name':'aike'}] print(func(l)) print(func(l1)) print(func(l2)) #打印 ((('a', 'b', 'cd'), ('aa', 'bb', 'ccdd')),) ([1, 2, 3, 4, 5, [11, 22, 33]],) (['adsad', '艾克', [1, 2, 3, 4], {'s': 'alex', 'name': 'aike'}],)
而站在实参的角度进行动态传输:起到的作用是打散,他会将传输的参数传给形参时按顺序打散,也就是迭代,int类型不可迭代会报错
def func(*args): return args l = ['adsad','艾克',[1,2,3,4],{'s':'alex','name':'aike'}] l1 = 'adsad' l2 = [1,2,3,4] l3 = {'s':'alex','name':'aike'} l4 = '12121' print(func(*l)) print(func(*l1)) print(func(*l2)) print(func(*l3)) print(func(*l4)) #打印 ('adsad', '艾克', [1, 2, 3, 4], {'s': 'alex', 'name': 'aike'}) ('a', 'd', 's', 'a', 'd') (1, 2, 3, 4) ('s', 'name') ('1', '2', '1', '2', '1')
上面时*args,那么**kwargs会是怎么样呢
def func(**kwargs): return kwargs l = {'a':111,'b':222,'c':333} l1 = {'a':'你好函数'} # l2 = ('a','b','c') #报错 print(func(**l)) print(func(**{'a':'你好函数','b':'你好艾克','c':'你好李'})) print(func(**l1)) # print(func(l2)) # print(func(**[a = '你好,函数',c = '你好,艾克',i = '你好,李']))#报错 # print(func(l)) #报错 #打印 {'a': 111, 'b': 222, 'c': 333} {'a': '你好函数', 'b': '你好艾克', 'c': '你好李'} {'a': '你好函数'}
**即可。由于**kwargs的返回值是字典,所以在实参的角度进行动态传输必须以字典形式传入参数,否则会报错