我们在读python 代码时,经常会看到例如:
test_func(*param) 这样的函数,这代表什么意思呢?
我们写代码来加深对这个带*号参数的理解:
情况一:
看这段代码
# 带一个星 *
def test_func(*param):
# 数据以元组显示
print(type(param))
print(param)
# 调用
test_func('bar', 2, 3)
运行结果:
<class 'tuple'>
('bar', 2, 3)
从运行的结果可以看到,传入不同类型的参数给函数时,函数带一个*号的参数会解释为 tuple 元组的数据(<class ‘tuple’>)。
情况二:
那么带两个星号会怎样?
# 传入两个星 **
def test_func2(**param):
# 数据以字典显示
print(type(param))
print(param)
# 调用
#test_func2('bar', 2, 3)
首先想想,如果我们再传test_func()同样的参数会怎样?
运行结果:
运行结果报错!
那应该怎样传参数呢?
# 传入两个星 **
def test_func2(**param):
# 数据以字典显示
print(type(param))
print(param)
# 调用
test_func2(a='bar', b=2, c=3)
运行结果:
<class 'dict'>
{'a': 'bar', 'b': 2, 'c': 3}
结果显示传入的对应参数解释为字典dict类型。
情况三:
我们经常会遇到这样的情况,希望函数至少要传一个参数,其他的参数可有没有,应该怎么做呢?
# 混合使用
def test_func3(param1='foo', *param2, **param3):
print(type(param1))
print(param1)
print(type(param2))
print(param2)
print(type(param3))
print(param3)
# 调用
test_func3('bar', 1, 2, 3, a='4', b='5', c='6')
运行结果:
<class 'str'>
bar
<class 'tuple'>
(1, 2, 3)
<class 'dict'>
{'a': '4', 'b': '5', 'c': '6'}
结语:
从上面的程序和运行结果中,我们已初步了解了带星号参数的基本用法。只要自己修改一下,多跑几次,很快就可以熟悉理解。