python函数的参数
目录
- 函数的参数
- 位置参数
- 默认参数
- 可变长参数
- 函数参数补充
函数的参数
# 函数参数分为两大类:
形式参数 在函数定义阶段括号内填写的参数为形式参数 简称 "形参"
def func(x,y):
其中 x ,y 则为函数的形参
实际参数 在函数调用阶段括号内填写的参数为实际参数 简称 "实参"
func(1,2)
1,2则为函数的实参
'''
形参与实参的关系
我们可以将形参看成是变量名 实参看成是变量值
两者在函数调用阶段临时绑定 函数运行结束断开
形参的表现形式只有一种就是变量名
实参的表现形式有很多种 (但是核心就是变量值)
'''
位置参数
# 位置参数
按照从左到右的顺序依次填入的参数
# 位置形参
定义函数阶段括号内从左到右依次填写的变量名
# 位置实参
调用函数阶段括号内从左到右依次填写的变量值
# 定义一个可以对比大小的函数(掺入两个值 返回较大的)
关键字实参(可以打破位置顺序)
在函数调用阶段通过 形参名=数据值的形式 指名道姓的传值
# 注:位置形参与位置实参是一一对应的
# 位置形参在绑定是多一个不行少一个也不行
'''格式越简单的越靠前 格式越复杂的越靠后'''
默认参数
默认参数
默认形参
函数在定义阶段就可以为形参赋值
1. 该形参在函数调用阶段如果不给值 则使用默认的
2. 该形参在函数调用阶段如果给值 则不使用默认的 使用调用时给的
# eg:
定义学员注册功能
def register(name,age,gender = 'male')
print('%s|%s|%s'% (name,age,gender))
register('jason',123) # 输出为 jason|123|male
register('jason2',22,'remale') # 输出为jason2|22|remale
# 位置形参与默认值形参在定义的时候,位置形参必须在默认值形参的前面
# 同样遵循 : 越简单越靠前 越复杂的越靠后
可变长参数
1.函数无论传入多少位置参数都可以正常运行
即为可变长参数
def func(x,y,*a):
priny(x,y,a)
func() # 报错
func(1) # 报错
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, **a):
print(x, y, a)
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}
# **号在形参中的使用 用于接收多余的关键字参数 并组织成字典的形式赋值为**号后的变量名
3.定义一个函数无论传入多少位置参数和关键字参数都可以正常运行
def func(*a,**b):
print(a,b)
func() # () {}
func(1,2,3,4) # (1, 2, 3, 4) {}
func(a=1,b=2,c=3) # () {'a': 1, 'b': 2, 'c': 3}
func(1,2,3,4,a=1,b=2,c=3) # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
'''
可变长形参 *与**后的变量名都可以随便定义的
但在python中推荐使用 *args **kwargs
eg:
def func(*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}
'''
**号在实参中的使用
会将字典内的键值对大散成关键字参数传入
'''
函数参数补充
1.命名关键字参数
def register(name,age,*,sex,height):
pass
register('jason',22,'male',183) # 报错
register('lili',18,gender='male',height='1.8m') #正确使用
# 故:gender height 在传入实参的时候必须以关键字参数的形式(单独*后的要以关键字参数的形式)
# 了解即可......