2020 python学习第十二天————函数参数与函数对象
1.1 函数的参数分两类
1.1.1 定义阶段函数内指定的参数称之为形式参数,简称形参
形参就相当于变量名
1.1.2 调用阶段括号内传入的值称之为实际参数,简称实参
实参就相当于变量值
调用函数时会将实参的值绑定给形参,变量只能在函数内用
1.2 第一组形参与实参
1.2.1 位置形参
按照从左到右的顺序依次定义形参
特点:必须被传值,多一个不行少一个也不行
def func(x,y):
1.2.2 位置实参
按照从左到右的顺序依次定义实参
特点:按照位置与形参一一对应
func(1,2)
1.2.3 关键字实参
按照key=value的形式为指定的形参传值
特点:指名道姓为某个形参传值,可以完全打乱顺序
def func(x, y):
func(y=2, x=1)
注意:可以混用位置实参与关键字实参,但是
1、不能对同一个形参重复赋值
def func(x,y):
func(1,2,x=3)
2、关键字实参必须跟在位置实参的后面
def func(x,y):
func(1,y=2)
1.2.4 默认参数
特点:具有默认值的形参,指的是在定义函数阶段就已经为参数赋值,这意味着在调用函数阶段可以不用为默认参数传值
注意:
1、位置形参必须放在默认形参的前面。
2、默认形参的值是在函数定义阶段就被固定的,如果调用没有为默认形参传值,那么不会每次调用都重新赋值。函数的调用彼此之间应该做到没有关联,所以说默认形参的通常应该是不可变类型。
1.3 第二组形参与实参
可变长参数
可变长指的是在调用函数时,传入的实参个数不固定,而实参是为形参赋值的
所以对应着也应该有新的形参格式来负责接收不固定长度的实参
1.3.1 形参中带*与**
1. *形参名:*会负责把溢出的位置实参存成元组然后赋值给后面的形参名,形参名通过应该是args
2. **形参名:**会负责把溢出的关键字实参存成字典然后赋值给后面的形参名,形参名通过应该是kwargs
注意:*与**在形参中混用,整体的顺序如下
def func(x,y=2,*m,**n):
1.3.2 实参中带*与**
1. 实参中带*,*后跟的那个值应该是一个可以被for循环遍历的值
*会后面的那个值打散成位置实参
2. 实参中带**,*后跟的那个值应该是一个字典
**会后面的那个值打散成关键字实参
形参中带*与**是汇总操作
实参中带*与**是打散操作
2.1 函数对象
在python中函数是第一类对象,简称函数对象
函数对象指的就是可以把函数当做变量一样去使用
2.2 可以赋值
def foo():
f=foo
f()
2.3 可以当做参数传给另外一个函数
def func(aaa) # aaa=函数foo的内存地址
print(aaa)
def foo():
print(‘from foo‘)
func(foo)
2.4 可以当做函数的返回值
2.5 可以当做容器类型的元素