闭包定义:
在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包
简单说就是:
当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包
两种方式实现内容加标签的功能
通过闭包方式
def tag(tag_name):
def add_tag(content):
return "<{tag}>{content}</{tag}>".format(tag=tag_name, content=content)
return add_tag
a_tag = tag("a")
print(a_tag("hello")) # <a>hello</a>
for cell in a_tag.__closure__:
print(cell.cell_contents)
# a
通过面向对象方式
class Tag(object):
def __init__(self, tag_name):
self.tag_name = tag_name
def __call__(self, content):
return "<{tag}>{content}</{tag}>".format(tag=self.tag_name, content=content)
a_tag = Tag("a")
print(a_tag("hello")) # <a>hello</a>
for key, value in a_tag.__dict__.items():
print("{} = {}".format(key, value))
# tag_name = a