函数的参数会涉及以下几个概念:
形式参数(parameter)、实际参数(argument)、默认参数、关键字参数、可变参数(收集参数)
一、形参与实参
>>> def test(name,content): #name 和content是形式参数(定义时候的参数)
print(name+'-->'+content)
>>> test('小猴子跳跳','加油') #‘小猴子跳跳’和‘加油’是实际参数(调用时候的参数)
小猴子跳跳-->加油
>>> test('加油','小猴子跳跳') #一般情况下,参数是按照顺序来进行赋值的。
加油-->小猴子跳跳
二、关键字参数(调用时)
注意:如果和位置参数混用是,关键字参数要放在后面
>>> test(name='小猴子跳跳',content="加油") #这叫做关键字参数,是在调用的时候,注意:是在调用的时候,为了避免顺序混淆赋值错误而指定具体了具体的参数的值,注意,这是在调用的时候用到的,关键字参数。
>
小猴子跳跳-->加油
>>> test(content="加油",name='小猴子跳跳')#关键字参数,尽管顺序与定义的时候不一致,但是结果还是一致。
小猴子跳跳-->加油
>>>
三、默认参数(定义时)
def test(content,name='小猴子跳跳'):
print(name+'-->'+content)
#在定义函数的时候,注意,是定义函数的时候,给参数赋了值,就叫#做默认参数,在实际调用的时候,如果没有该参数,则会直接赋值为该默认值,如果有新的该参数的值,则会是新的值。
>>> test('123')
小猴子跳跳-->123
>>>
>>> def test(name='小猴子跳跳',content): #注意:有默认参数的,默认参数应该放在最后面。
print(name+'-->'+content)
SyntaxError: non-default argument follows default argument
四、可变参数(收集参数)
print,min,max 是一种典型的可变参数
>>> def test(*paras):
print('输入的参数是:'+str(paras))
print('一共有'+str(len(paras))+'个参数')
print('第2个参数是:'+str(paras[1]))
>>> test(1,'abc','123','*',[1,2,3])
输入的参数是:(1, 'abc', '123', '*', [1, 2, 3])
一共有5个参数
第2个参数是:abc
>>>
可变参数存在以下的问题:
当一个函数除了可变参数外,还有其他参数时,就需要注意,可变参数与其他参数的位置与书写。
1.这种写法就是错的。调用函数是缺少了一个实际参数txt.
>>> def test(*paras,txt):
print('输入的参数是:',paras,txt)
print('一共有',len(paras),'个可变参数')
print('第2个可变参数是:',str(paras[1]))
>>> test(1,'abc','123','*',[1,2,3],5)
Traceback (most recent call last):
File "" , line 1, in <module>
test(1,'abc','123','*',[1,2,3],5)
TypeError: test() missing 1 required keyword-only argument: 'txt'
如何解决问题1呢,可以用以下两种方式,1把其他参数定义在最前面,可变参数定义在最后面。
2,将其他参数定义为默认参数。
```c
>>> def test(*paras,txt=9): #2,将其他参数定义为默认参数
print('输入的参数是:',paras,txt)
print('一共有',len(paras),'个可变参数')
print('第2个可变参数是:',str(paras[1]))
>>> test(1,'abc','123','*',[1,2,3],5)
输入的参数是: (1, 'abc', '123', '*', [1, 2, 3], 5) 9
一共有 6 个可变参数
第2个可变参数是: abc
>>> def test(txt,*paras): #1把其他参数定义在最前面,可变参数定义在最后面。
print('输入的参数是:',paras,txt)
print('一共有',len(paras),'个可变参数')
print('第2个可变参数是:',str(paras[1]))
>>> test(1,'abc','123','*',[1,2,3],5)
输入的参数是: ('abc', '123', '*', [1, 2, 3], 5) 1
一共有 5 个可变参数
第2个可变参数是: 123
>>>