普通参数(顺序参数)
默认参数
收集参数
命名关键字参数
关键字参数收集
'''
普通参数 就是位置参数,也叫顺序参数,是必须传递的参数,通常以最简单的传入参数的方式,其实在其它的语言中也常常被使用
'''
def ganyu(x, y):
print(x, y)
ganyu(name, age)
'''
默认参数
'''
# 比如要求有三个参数:a,b,c,至少要传递进两个参数值
# 那么这时,最后一个参数就是默认参数,但是默认参数需要在定义行参时定义默认值
# 并且需要注意的是默认参数需要排在普通参数后面,并且给定参数
def ganyu(a, b, c=100):
print(a, b, c)
# 调用时传递了默认的参数,那么里面使用的就是传递的实参,这时输出ganyu1 0 3
ganyu('ganyu1', 0, 3)
# 如果没有指定默认的的参数,那么里面使用的就是默认的值,这时输出ganyu1 2 100
ganyu('ganyu1', 2)
'''
收集参数
'''
# 一个行参专门收集多余的时参,或者可以理解为不确定需要传递多少个实参直接用一个行参来接受
# 在定义函数时,如果需要收集参数,那么这个行参前面需要加一个*号,例如 *args
# 接收的多余的参数,会存储在args中,形成一个元组
def ganyu1(a='+',*args):
print(type(args))
if a=='+':
print('加运算',args)
else:
print('减运算',args)
ganyu1('+',100,200,300,400)
'''
命名关键字参数
'''
# 1、关键字参数定义在收集参数后面
# 2、关键字参数必须通过行参的名字来进行传递
def ganyu1(a, b, c=3, *ganyu, name):
print(a, b, c)
print(ganyu)
print(name)
ganyu1(1, 2, 4, 5, 6, 7, 8, 9, name="ganyu")
'''
+顺序参数和命名关键字参数的区别
+顺序参数需要按照顺序传入
+也可以把顺序函数的普通参数按照关键字参数进行传递
+在调用时,必须按照行参的名字进行参数的传递
'''
def ganyu2(arg,name):
print(arg)
print(name)
ganyu2(name="ganyu3",arg="ganyu4")
ganyu2('ganyu3','ganyu4')
'''
关键字参数收集
'''
# **kwargs<= 其中kw ==> 也称keyword
# 带*和带**的区别:
# 带一个*就是收集参数,带两个**就是关键字参数收集
def ganyu(a, b, c, *args, name, age, **kwargs):
print(a, b, c)
print(args) # 普通收集参数,会把多余的参数收集成为==>元组
print(name, age)
print(kwargs) # 关键字参数收集,会把多余的关键字参数收集为==>字典
ganyu(1, 2, 3, 4, 5, 6, 7, name="my name is ganyu", age="00", aa="11", bb="22", cc="33")
# 1,2,3传递给a,b,c,4,5,6,7传递给args,my name is ganyu传递给name,00传递给age,aa,bb,cc都被kwargs收集
# 注意行参声明位置
# 普通参数==>默认参数==>收集参数==>关键字参数==>关键字收集参数
# 经常出现的参数:普通参数、收集参数、关键字收集参数
# 如果位置错误则会报错
def aa(a, name, *args):
print(a)
print(name)
# aa(1,name="1",1,2,3,4,5)



