函数的参数
1、必传参数
1.1、函数中定义的参数没有默认值,在调用函数时如果不传入则报错
1.2、在定义函数的时候,参数后边没有等号与默认值
1.3、错误:def add(a=1, b=1) 是错误的
在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数,且顺序与参数顺序相同,就是必传参数
2、默认参数
在定义函数的时候,定义的参数含有默认值,通过复制语句给他设一个默认的值
如果默认参数在调用函数的时候给予了新的值,函数将优先使用后传入的值进行工作
3、不确定参数---可变参数
3.1、没有固定的参数名和数量(不知道要传的参数名具体是什么)
def add(*args, **kwargs):
return 1
add(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) <class 'tuple'>
{'name': 'dewei', 'age': 33, 'top': 174} <class 'dict'>
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、参数规则
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)