9.25
一、函数的使用原则:
函数的使用原则分为2个阶段
1.定义阶段:只检测语法,不执行函数体代码
2.调用阶段:会触发函数体代码的运行
先定义后调用
二、函数的定义与调用形式
函数定义的3种形式:
1.有参函数
def func(xxxxx)
pass
func(1)
2.无参函数
def func()
pass
func()
3.空函数 写框架
def func()
pass
函数调用的3种形式:
语句形式
表达式
将函数的调用当作参数传给另外一个函数
三、函数的返回值
注意点:
1.函数的返回值没有类型限制
2.函数的返回值没有个数限制
1.返回多个值时,返回值用逗号隔开,返回的是元组
2.返回单个值时,返回的是值本身
3.返回0个值或者没有return,返回none
return除了有返回值的功能,还有结束函数的功能
四、函数参数的使用
1.函数的参数分为两大类
形式参数(刑参)
实际参数(实参)
ps: 在调用函数阶段会将实参(值)的值绑定给形参(变量名),这种绑定关系只在调用函数时生效,在函数执行完毕后就会解除绑定
2.细分
1.位置参数
位置形参:在定义阶段,按照从左到右的顺序依次定义的形参
特点:必须被传值,多一个不行少一个也不行
位置实参:这调用阶段将值从左到右传给形参
特点:与形参一一对应
2.关键字实参
这调用阶段,按照k,v的形式定义的实参
特点:可以打乱顺序,也能将值传给形参
实参的形式可以是位置实参与关键字实参混合使用,但是必须遵循原则
1.位置实参必须放在关键词实参的前面
2.不能对一个形参重复传值
3.默认形参
在定义阶段就已经赋值
特点:1.定义阶段已经赋值,意味着可以不用传值
2.位置形参必须放在默认形参的前面
3.可以对默认形参重新赋值
4.默认形参的值通常是不可变类型
4.可变长参数
指的是在调用阶段,实参的个数不固定
*--->溢出的位置实参
**--->溢出的关键字实参
*的用法:
在形参前加*,*会将溢出的实参以元组的形式表示
在实参前加*,但凡碰到实参前加*的,先将实参打散成对应的位置实参再与形参对应
**的用法:
在形参前加**,**会将溢出的关键词实参以字典的形式表示
在实参前加**,但凡碰到实参前加*的,先将实参打散成对应的关键词实参再与形参对应
*与**的应用:
def index(name,age,sex):
print('index=====>',name,age,sex)
# 会将wrapper函数接收的参数格式原封不动地转嫁给其内部的index函数,必须要遵循的是index的参数规则
def wrapper(*args,**kwargs): #args=('egon',) kwargs={'sex':'male','age':18}
# print(args)
# print(kwargs)
index(*args,**kwargs) #index(*('egon',),**{'sex':'male','age':18}) #index('egon',sex='male',age=18)
# wrapper(1,2,3,4,5,a=1,b=2,c=3)
wrapper('egon',sex='male',age=18)