#!/usr/local/bin/python3
# -*- coding:utf-8 -*-
'''
#----------函数位置参数和关键字参数----------
def test(x,y): #此处的 x,y为形参
print(x)
print(y)
test(1,2) #位置参数调用-此处的 1,2为实参,且与形参一一对应
test(y=2,x=1) #关键字调用,与形参位置无关
#test(x=1,2) #此处会报错:因为在位置参数调用和关键字调用混合使用的情况下,会优先进行位置参数调用
#因此位置参数必须放在关键字的前面
#----------函数默认参数----------
def test(x,y=2): #何为默认参数?
print(x) #指在定义形参时,给形参提前赋的值
print(y)
test(1) #此时若只传递一个实参,那么另外一个实参则由函数默认参数所指定
test(1,y=3) #也可修改默认参数,即传递实参时指定默认参数即可,与test(1,3)等价
#默认参数特点:调用函数时,默认参数可有可无(非必须传递)
#----------参数组----------#即 非固定参数
#1-实参个数不固定 #注:*args:接收N个位置参数转换为元组的形式
def test(*args): #对于实参个数不固定的情况,可以定义一个'*'开头的形参,'*'是功能代号
print(args) #这个形参会将所有的实参放入一个tuple
test(1,2,3,4,5)
test(*[1,2,3,4,5]) #传入列表参数,相当于*args=*[1,2,3,4,5] --> args=tuple([1,2,3,4,5])
#1-与位置参数结合(*args)
def test2(x,*args):
print(x)
print(args)
test2(1,2,3,4,5,6,7) #将 1 赋值给 x,(2,3,4,5,6,7)赋值给args
#2-接收字典作为参数
def test3(**kwargs): #注:**kwargs:将N个关键字参数转换为字典的方式
print(kwargs)
test3(name="zhangyu",age=18) #将关键字名称作为key,参数值作为value
test3(**{"name":"zhangyu","age":18}) #可以传入一个字典作为参数
#3-与位置参数结合(**kwargs)
def test4(name,**kwargs):
print(name)
print(kwargs)
test4("zhangyu",age='18',sex='M')
#4-与默认参数结合
def test5(name,age=18,**kwargs):
print(name)
print(age)
print(kwargs)
test5("mahongyan",sex='M',hobby='game')
test5("zhangguobin",sex='M',hobby='None',age='40')
#5-混合使用
def test6(name,age=18,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs)
test6("zhangyu",age=34,sex='M',hobby='game') #注:args只能接收位置参数,因此此时args为空
'''