python–closure闭包
1、就是当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包
2、闭包函数相对与普通函数会多出一个__closure__的属性
里面定义了一个元组用于存放所有的cell对象,每个cell对象一一保存了这个闭包中所有的外部变量
例子
def make_printer(msg):
def printer():
print(msg) # 夹带私货(外部变量)
return printer # 返回的是函数,带私货的函数
printer = make_printer('Foo!')
printer()
闭包一般使用于装饰器
例子:
def html_tags(tag_name):
def wrapper_(func):
def wrapper(*args, **kwargs):
content = func(*args, **kwargs)
return "<{tag}>{content}</{tag}>".format(tag=tag_name, content=content)
return wrapper
return wrapper_
@html_tags('b')
def hello(name='Toby'):
return 'Hello {}!'.format(name)
print(hello()) # <b>Hello Toby!</b>
print( hello('world')) # <b>Hello world!</b>