闭包:
1.闭包的概念:当一个函数返回一个函数,且内部函数可以使用外部函数变量的行为,就叫闭包。如下所示:
def foo():
m=3;
n=4;
def bar():
a=5;
return m+n+a;
return bar;
闭包可以被理解为一个只读的对象,你可以给他传递一个属性,但它只能提供给你一个执行的接口。因此在程序中我们经常需要这样的一个函数对象——闭包,来帮我们完成一个通用的功能,比如后面会提到的——装饰器。
使用闭包
第一种场景 ,在python中很重要也很常见的一个使用场景就是装饰器,Python为装饰器提供了一个很友好的“语法糖”——@,让我们可以很方便的使用装饰器,装饰的原理不做过多阐述,简言之你在一个函数func上加上@decorator_func, 就相当于decorator_func(func):
def decorator_func(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@decorator_func
def func(name):
print 'my name is', name
# 等价于
decorator_func(func)
在装饰器的这个例子中,闭包(wrapper)持有了外部的func这个参数,并且能够接受外部传过来的参数,接受过来的参数在原封不动的传给func,并返回执行结果。
def ret_func(a):
def func():
return a
return func
func1 = ret_func(2)
func1()
闭包有什么用:
惰性求值 || 延迟求值 || 在一系列函数调用中保持某个状态
闭包会捕捉内部函数的环境,因为可用于包装现有函数。
类(python中是多继承ÿ