参数详解
参数详解
1.位置参数
位置形参
在函数定义阶段括号内由左到右填写的变量名
位置实参
在函数调用阶段括号内由左到右传入的数据值
关键字实参(可以打破位置顺序传值)
在函数调用阶段以形参名=数据值的形式强行给指名道姓的传值
"""
1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定
2.位置参数在绑定的时候多一个不行少一个也不行
"""
'''格式越简单的越靠前 格式越复杂的越靠后'''
默认参数
默认形参
函数在定义阶段预先给形参赋的值
1.该形参在函数调用阶段如果不给值 则使用默认的
2.该形参在函数调用阶段也可以继续给值 则使用你给的
# 定义学员注册功能 def register(name, age, gender='male'): print('%s:%s:%s' % (name, age, gender)) register('jason', 18) register('tony', 28) register('kevin', 38) register('lili', 18, 'female') register('lili', 18, gender='female')
"""
位置形参与默认值形参在定义的时候
位置形参必须在默认值形参的前面
"""
'''格式越简单的越靠前 格式越复杂的越靠后'''
可以接受多余实参的形参
*号在形参中的使用
用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
# 1.函数无论传入多少位置参数都可以正常运行 def func(x,y,*a): print(x,y,a) func() # () func(1) # (1,) func(1, 2, 3, 4, 5, 6, 7) # (1, 2, 3, 4, 5, 6, 7) func(1,2) # 1 2 () func(1,2,3,4,5,6,7,8,9) # 1 2 (3, 4, 5, 6, 7, 8, 9) func(1,2) # 1 2 (3, 4, 5, 6, 7, 8, 9)
**号在形参中的使用
用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
# 2.函数无论传入多少关键字参数都可以正常运行 def index(x, y, **b): print(x, y, b) index() # {} index(a=1,b=2,c=3,d=4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4} index(y=2, x=1) # 1 2 {} index(y=2, x=1, u=222, k=111, l=444) # 1 2 {'u': 222, 'k': 111, 'l': 444}
(*args, **kwargs):联用
# 3.定义一个函数无论传入多少位置参数和关键字参数都可以正常运行 def index(*a,**b): print(a,b) index() # () {} index(1,2,3,4) # (1, 2, 3, 4) {} index(a=1,b=2,c=3) # () {'a': 1, 'b': 2, 'c': 3} index(1,2,3,4,a=1,b=2,c=3) # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3} """ 墨守成规 可变长形参 *与**后面的变量名其实是可以随便定义的 但是python中推荐使用 *args **kwargs def index(*args, **kwargs): pass """
*号在实参中的使用
会将列表、元组内的元素打散成位置参数的形式一一传值
def index(a, b, c): print(a,b,c) new_list = [11,22,33] index(new_list) # 肯定不行 列表是一个整体 相当于一个实参 index(new_list[0],new_list[1],new_list[2]) # 可以 '''如果index形参是*args 列表里面有很多元素 如何实现按照位置一一传入''' def index1(*args): print(args) new_list1 = [11,22,33,44,55,66,77,88,99] index1(*new_list1) # index1(11,22,33,44,55,66,77,88,99)
**号在实参中的使用
会将字典内的键值对打散成关键字参数传入
def index2(**kwargs): print(kwargs) new_dict = {'username':'jason','pwd':123} index2(**new_dict) # index2(username='jason',pwd=123) # {'username': 'jason', 'pwd': 123}
命名关键字参数
def register(name,age,*,sex,height): pass register('jason',18,'male',183) register('lili',18,sex='male',height='1.8m') #正确使用 """ sex height在传入实参的时候必须以关键字参数的形式 ps:该类型的参数几乎不用 也几乎很少能碰到 """
END