Python函数中的*(星号)到底是做什么的?

时间:2018-12-24 01:42:39

标签: python python-3.x

我已经在下面阅读过。

如果存在* 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')

0 个答案:

没有答案