Python编程:通过实例理解闭包

简介: Python编程:通过实例理解闭包

闭包定义:

在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包


简单说就是:

当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包


两种方式实现内容加标签的功能

通过闭包方式

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
相关文章
|
5月前
|
C++ Python
54 python - 类属性、实例属性
54 python - 类属性、实例属性
24 0
|
8月前
|
Python
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
50 0
|
Python
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
149 0
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
|
Python
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数
【Python零基础入门篇 · 15】:面向对象基础(类和对象)、类属性和实例属性的访问、构造函数
|
Linux 云计算 开发者
【python | linux09】类属性、实例属性、面向对象四大特征
在类的属性中,分为公有类属性和私有类属性; 公有类属性:所有对象都可访问; 私有类属性:只能在类内部访问,不能通过实例对象访问
124 0
【python | linux09】类属性、实例属性、面向对象四大特征
|
Python
Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
190 0
Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
|
Python
Python 进阶_OOP 面向对象编程_实例属性和方法
目录 目录 构造器和解构器 构造器 __init__ 真构造器 __new__ 解构器 __del__ 实例方法 Python 中的 抽象方法 实例属性 查看实例属性 实例属性和类属性的区别 访问不可变类属性 访问可变类属性 构造器和解构器 构造器 __init__() 类函数 __init__() 是 Python 类中预定义的方法,需要被重载才会生效。
1080 0
|
15天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。