1.1、函数中定义的参数没有默认值,在调用函数时如果不传入则报错
1.2、在定义函数的时候,参数后边没有等号与默认值
1.3、错误:def add(a=1, b=1) 是错误的
在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数,且顺序与参数顺序相同,就是必传参数
在定义函数的时候,定义的参数含有默认值,通过复制语句给他设一个默认的值
如果默认参数在调用函数的时候给予了新的值,函数将优先使用后传入的值进行工作
3.1、没有固定的参数名和数量(不知道要传的参数名具体是什么)
def add(*args, **kwargs):return 1add(1, 2, 3, name = 'dewei', age = 33)对应*args 对应**kwargs
3.2、*args 代表:将无参数的值合并成元组
3.3、**kwargs 代表将有参数与默认值的复制语句合并成字典
def test_args(*args, **kwargs):print(args, type(args))print(kwargs, type(kwargs))test_args(1, 2, 3, 4, 5, 6, name = 'dewei', age = 33, top = 174)(1, 2, 3, 4, 5, 6)
{'name': 'dewei', 'age': 33, 'top': 174}
def test_args_super(*args, **kwargs):if len(args) >= 1:print(args[0])if 'name' in kwargs:print(kwargs['name'])else:print('no name')test_args_super(1, name = 'dewei')# 打印结果
1
dewei
a = ('python', 'django')
b = {'name' : 'dewei'}
test_args_super(*a, **b)
4.1、参数的定义从左到右依次是 必传参数,默认参数, 可变元组参数,可变字典参数
4.2、函数的参数传递非常灵活
4.3、必传参数与默认参数的传参多样化
def add(a, b = 1):print(a + b)add(1, 2)
add(1)
add(a = 1, b = 2)
add(b = 2, a = 1)
# add(b = 2) 会报错def test(a, b=1, *args):print(a, b, args)s = (1, 2)
test(1, 2, *s)def test2(*args, a, b=1):print(a, b, args)test2(a=1, b=2, *s)def test3(a, b=1, **kwargs):print(a, b, kwargs)test3(1, 2, name = 'dewei')
test3(a = 1, b = 2, name = 'dewei')
test3(name = 'dewei', age = 33, a = 1, b = 2)d = {'name' : '小慕'}
test3(a = 1, b = 2, **d)
test3(**d, a = 1, b = 2)