python闭包、装饰器
1、闭包 closure
闭包是指引用了此函数外部嵌套函数作用域内的变量的函数
闭包必须满足三个条件:
必须有一个内嵌函数
内嵌函数必须引用外部函数中的变量
外部函数的返回值必须是内嵌函数
def make_pow(y): def fn(x): return x ** y return fn pow2 = make_pow(2) print(pow2(10)) # 100 del pow2 # 释放闭包函数, 同时释放闭包 # 绑定的外部嵌套函数的执行环境
闭包的特点:
闭包中外部嵌套函数中的变量不会在函数调用后立即销毁,而是被内嵌函数引用
使用闭包的注意事项:
由于闭包会使得函数中的变量都被保留在内存中,内存消耗比较大,所以不能滥用闭包
2、装饰器 decorators(专业提高篇)
装饰器是一个函数,主要作用是用来包装另一个函数或类(后面才讲)
作用:
在不修改被装饰函数的源代码,不改变被装饰的函数的调用方式的情况下添加或改变原函数的功能。
函数装饰器的语法:
def 装饰器函数名(fn):
语句块
return 函数对象
@装饰器函数名 <换行>
def 被装饰函数名(形参列表):
语句块
def mydeco(fn): def fx(): print("++++++++++++++++") fn() print('----------------') return fx @mydeco def myfunc(): print("myfunc函数被调用") # myfunc = mydeco(myfunc) # 添加装饰器 myfunc() myfunc()
3、函数的文档字符串
函数内第一次未赋值给任何变量的字符串是函数的文档字符串
语法:
def 函数名(参数列表):
'函数文档字符串'
语句块
示例:
def myfunc(a, b, c):
'这是函数的文档字符串'
pass
>>> help(myfunc)
5、函数的 __doc__属性
__doc__属性用于绑定函数的文档字符串
6、函数定义语句(def 语句)的完整语法:
[@装饰器名1]
[@装饰器名2]
[...]
def 函数名([位置形参],[*元组形参], [命名关键字形参],[**字典形参]):
'''文档字符串'''
语句块