# 函数的位置参数必须要传实参,可以按位置,也可以按关键字传
# 函数的默认参数可以不传实参,可以按位置,也可以按关键字
# 不定长参数*args只收集位置参数形成元组,不定长参数应放在后面,要不会把实参当做位置参数然后报错
# 用**,只要定义了关键字参数,以后针对这个参数传值就必须是关键字形式传递
# 关键字参数和关键字传值必须放在位置参数(实参)后面
# def add_num(list1 = []): # 运行第二次以后里面的默认参数不会执行,会把第一次运行完的结果当做关键字参数放入
# list1.append(100)
# print(list1)
# add_num()
# add_num()
# add_num()
# 函数:每个用户去调用函数,在自己的列表中追加100,不能干扰别人的
# def add_num(list1=None):
# if list1==None:
# list1 = [] # 针对每个用户创建自己的list
# list1.append(100)
# print(list1)
# add_num()
# add_num()
# add_num()
# *args:位置参数,收集成元组
# def func1(name,*args,age=12):
# print(args)
# for i in args:
# print(i)
# func1('python', 'man','meiguo', age=28)
# **kwargs :收集关键字参数,合并字典
# def func2(**kwargs):
# print(kwargs)
# for key,value in kwargs.items():
# print(key)
# print(value)
# func2(name='python',age=28,sex='man',weizhi='helan')
# 定义关键字参数
def func1(*,name,age,sex,**k):
print(name)
print(age)
print(sex)
print(k)
#
# func1('python', 28,sex='man')
func1(name='python', age=30, sex='nv', aw='as',ad=22)
# 工作经验:不定长参数都是放到最后
def func1(a,b, c=100, *args, **kwargs):
'''
sadasdada # 函数说明文档,使用help可查看,函数名前用# ,函数名后用文档注释
'''
print(a)
print(b)
print(c)
print(args)
print(kwargs)
# 不定长参数可以不接收值
func1(10,99, 20, f=200, d=90) # 函数是按顺序接收,如果提前把关键字参数给了实参
help(func1) # 则后面紧跟着的是函数里写形参位置,关键字参数后面的要传入实参的形式
# c是第三个位置,能接收第三个数据
# func1(10, 20, 300)
# func1(10, 20, 30, 40,50,60,name='python')
# 下一行报错:一个参数c只能接收一个值:这里是c接收了30和100
# func1(10,20,30,50,60, c=100,name='python')