以下是调用函数时可使用的正式参数类型:
- 必需参数
- 关键字参数
- 默认参数
- 不定长参数
必需参数
- 必需参数也就是位置参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
def Hello(name,age):
print(F'你好,姓名:{name},年龄:{age}') #函数体
Hello("静静",18) #调用函数
运行结果:
你好,姓名:静静,年龄:18
- 会根据调用时传入的位置取值:
def Hello(name,age):
print(F'你好,姓名:{name},年龄:{age}') #函数体
Hello(18,"静静") #调用函数
运行结果:
你好,姓名:18,年龄:静静
可见如果位置写错,运行时就会根据写的位置获取,与实际不符合;
- 如果少传入值或者多传入值都会直接报错:
def Hello(name,age):
print(F'你好,姓名:{name},年龄:{age}') #函数体
Hello("静静") #调用函数
运行结果;
Traceback (most recent call last):
File "C:/workspace/pythonTest/0924/func.py", line 3, in <module>
Hello("静静") #调用函数
TypeError: Hello() missing 1 required positional argument: 'age'
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
def Hello(name,age):
print(F'你好,姓名:{name},年龄:{age}') #函数体
Hello(age=19,name="静静") #调用函数
运行结果:
你好,姓名:静静,年龄:19
默认参数
调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:
def Hello(name,age=12):
print(F'你好,姓名:{name},年龄:{age}')
Hello(name="静静") #调用函数时没有传入年龄
运行结果:
你好,姓名:静静,年龄:12
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:
- 加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
- 加了两个星号 ** 的参数会以字典的形式导入。
第一种形式的不定长参数,在传入额外的参数时可以不用指明参数名,直接传入参数值即可,
def sum(a,b,*args):
print(a)
print(b)
print(args)
sum(11,22,33,44,55,66,77)
sum(11,22,33)
sum(11,22)
运行结果:
11
22
(33, 44, 55, 66, 77)
11
22
(33,)
11
22
()
第二种因为返回的是字典,所以传入时需要指定参数名。
def test(a,b,c=33,*args,**kwargs):
print(a)
print(b)
print(c)
print(args)
print(kwargs)
#函数调用
test(11,22,33,44,55,task=99,done=89)
运行结果:
11
22
33
(44, 55)
{'task': 99, 'done': 89}
但是注意关键字参数声明时和调用必须写在最后面不然会报错:,同样默认参数也要写在后面;
test(11,22,33,44,task=99,done=89,55)
运行结果:
C:\softwore\Python\python.exe C:/workspace/pythonTest/0924/func.py
File "C:/workspace/pythonTest/0924/func.py", line 41
test(11,22,33,44,task=99,done=89,55)
^
SyntaxError: positional argument follows keyword argument