1.必须参数
-
调用函数的时候,必须以正常的顺序传参,实参的数量和形参的数量保持一致
def demo(name, age):
print("我的姓名是:%s, 年龄是:%d"%(name, age))
demo("张三", 22) # 我的姓名是:张三, 年龄是:22
demo(22, "张三") # TypeError: %d format: a real number is required, not str 若参数顺序不正确会报错
2.关键字参数
-
允许函数调用的时候,实际参数和形式参数的顺序不一致,使用关键字进行自动匹配
demo(age=24, name="王五") # 我的姓名是:王五, 年龄是:24
3.默认参数
-
是指在函数定义时,给形参设置的默认值
def fn(num1, num2 = 10):
print(num1 + num2)
fn(12, 36) # 48
fn(12) # 22
"""
使用默认参数时,注意的事项:
a.若函数中有默认参数,在调用函数时,若没有传递参数,则使用默认参数,若传递了参数,则使用传递的参数,传递的参数会覆盖默认参数
b.在定义函数时,若有默认参数,默认参数要放在参数列表的最后面,若放在前面会报错
"""
"""
# 默认参数放在前面会报错
def test(a = 13, b): # SyntaxError: parameter without a default follows parameter with a default
print(a - b)
"""
4.不定长参数(可变参数):*args 和 **kwargs
"""
a. *args:用来接收多个位置参数,args是arguments的简写,得到的参数是一个元组
b. *kwargs:用来接收多个关键字参数,kwargs是 keyword arguments的简写,得到的参数是一个字典
"""
def fn1(num, *args):
print(num, args)
fn1(13) # 13 ()
fn1(13, 32) # 13 (32,)
fn1(43, 447, 78) # 43 (447, 78)
"""
# 注意:若函数参数中有 *args和普通参数,要八可变参数(*args)放在参数列表的最后面
def fn2(*args, num):
print(args, num)
fn2(4343, 656, 78, 99, 4) # TypeError: fn2() missing 1 required keyword-only argument: 'num'
"""
def fn3(a, **kwargs):
print(a, kwargs)
fn3(76, x = 23, y = 87) # 76 {'x': 23, 'y': 87}
# fn3(76, 23, 87) # TypeError: fn3() takes 1 positional argument but 3 were given
"""
注意:
a.若函数中有 **kwargs 参数,在传输 kwargs 参数时,必须以键值对形式传输,k=v这种方式
b.参数列表中的 **kwargs 必须放在参数列表的最后面
def fn4(**kwargs, b): # SyntaxError: arguments cannot follow var-keyword argument
print(kwargs, b)
fn4(a = 32, b = 43, 32)
"""