学过python的都知道,函数参数可以带星号,单星号时将未知数量的参数封装在tuple中,
双星号则封装在dict ,那么疑问就随之而来了,函数名后的带星号参数 和 函数体中调用
参数时不带星号,区别在哪? 看下图:
画红框的都是函数参数,那么它们的区别在哪?
最明显的区别,带*号的参数个数不一定,可以传参数,也可以不传参数;不带星号的必须得传参数。
def function_with_one_star(*t):
print(t, type(t))
def function_with_two_stars(**d)
print(d, type(d))
比如定义了两个函数,分别用了带一个星号和两个星号的参数,运行下面的代码:
function_with_one_star(1, 2, 3)
function_with_two_stars(a = 1, b = 2, c = 3)
结果如下
(1, 2, 3) <class 'tuple'>
{'a': 1, 'c': 3, 'b': 2} <class 'dict'>
带一个星号(*)参数的函数传人的参数存储为一个元组(tuple);
而带两个星号(*)参数的函数传人的参数则存储为一个字典(dict),并且在
调用是采取 a = 1, b = 2, c = 3 的形式。
由于传人的参数个数不定,所以当与普通参数一同使用时,必须把带星号的参
数放在最后。
topping表示函数入参不固定,一般建议写法为:
def test(*args,*args)
你的函数中,比如你传 test(1,2,3,4,5,6)这种多参数场景,则定义函数的时候只能def test(*args)
,如果定义成 def test(args)的话,表示入参只有一个。