目录
一、函数中变量的作用域
1、①全局变量:声明在函数外部的变量
②局部变量:声明在函数内部的变量(先查找自身再查找全局)
2、函数内部可以使用全局变量但是不能修改(默认只有查找权限),如果一定要修改全局变量那么global(增加权限)
二、函数注释
三、函数值的传递、引用传递
1、值传递
在传递参数的时候仅仅是将自己的值拷贝了一份传递给函数的参数,变量不会改变
2、引用传递
在传递参数时传地址,函数获取的值也是同一块内存
四、匿名函数
1、在python中将一个函数作为参数传到另一个函数中去
注:函数的参数数据类型:只要是一个对象就行而函数本身就是一个对象
2、形式:lambada [arg1,arg2……](可有可无): 代码块(函数体)
3、作用条件:存在函数作为参数传递给函数,并且不想让外界访问,而且参数函数足够简单,即可以定义为匿名函数(lambad表达式)
五、Python3.8新特性
声明函数参数类型
六、偏函数
functools模块提供很多方法其中有一个就是偏函数
七、函数嵌套
1、函数可以作为返回值进行返回
2、函数可以作为参数进行传递
3、函数名本质上是一个变量名,指向函数的内存地址
八、闭包
1、一个函数嵌套一个函数,内存函数用到外层函数的局部变量,内层函数就被成为闭包
2、可以让一个变量常驻在内层中;可以避免全局变量被修改
3、内层函数如果要改变外层函数局部变量的值,要使用nonlocal关键字赋予权限
九、装饰器
1、装饰器本质上是一个闭包,作用是不改变原有函数的前提下为函数添加新的功能,但是源代码不改变
2、可以作用于日志、用户登录
3、雏形:
def wrapper(目标函数):
def inner():
之前添加的功能
目标函数()
之后添加的功能
return inner
4、装饰器参数:用可变参数接住
5、一个函数可以被多个装饰器装饰
十、高阶函数
1、map()
①map(将来可以调用的额,可迭代数据)
②从可迭代对象中获取第一个元素作为函数的参数传入函数中,将函数执行后返回结果作为生成对象中的第一个元素,最终返回一个可迭代对象
2、filter()
①对指定的序列进行过滤
②只要成立(为真,0为假其余数字为真)就输出
3、reduc()
用上一次计算的结果作为下一次传入的x值,如果上一次没有计算结果则将可迭代数据的前两个元素分布作为x,y传入,如果有额外数据会作为第一次传入的x