我已经在下面阅读过。
如果存在* identifier形式,则将其初始化为接收任何多余位置参数的元组,默认为空元组。如果存在** identifier形式,则它将初始化为一个新字典,该字典将接收任何多余的关键字参数,默认为一个新的空字典。
def func0(*args):
print('func 0 args : ',args)
def func1(args):
print('func 1 args :',args)
def func2(*args):
print('args : ',args)
print('args id :',id(args))
print('*args : ',*args)
print('args type :',type(args))
#print('*args type : ',type(*args))
#TypeError: type.__new__() argument 2 must be tuple, not str
print('*args[0] type : ', type(*args[0]))
#print(id(*args))
#TypeError: id() takes exactly one argument (3 given)
func0(*args)
func0(args)
#func1(*args)
#TypeError: func1() takes 1 positional argument but 3 were given
func1(args)
func2('a','b','c')
是结果。
在函数参数中使用*(星号)后,在函数(ex)中再次使用* print('* args:',* args))在我看来*打开了元组的包装。是吗?
args : ('a', 'b', 'c')
args id : 62408784
*args : a b c
args type : <class 'tuple'>
*args[0] type : <class 'str'>
func 0 args : ('a', 'b', 'c')
func 0 args : (('a', 'b', 'c'),)
func 1 args : ('a', 'b', 'c')