• Python进阶学习----一闭三器


    目录

    ​编辑

    前言

    一.三器

    1. 迭代器(Iterator)

    1.1 什么是可迭代对象

    1.2什么是迭代器

    1.3案例演示: 以下是一个简单的迭代器示例,遍历一个列表并打印每个元素:

    1.4迭代器总结

    2. 生成器(Generator)

    3. 装饰器(Decorator)

    二.一闭 

    4. 闭包(Closure)

    总结:


     

    前言

    Python是一种功能强大而灵活的编程语言,拥有许多强大的特性和工具,其中包括"一闭三器"——迭代器、生成器、装饰器和闭包

    一.三器

    1. 迭代器(Iterator

    1.1 什么是可迭代对象

    只要是可以通过for...in…的形式进行遍历的,那么这个数据类型就是可以迭代的

    1.2什么是迭代器

    迭代是python中访问集合元素的一种非常强大的一种方式。迭代器是一个可以记住遍历位置的对象,迭代器对象从第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。因此不会像列表那样一次性全部生成,而是可以等到用的时候才生成,因此节省了大量的内存资源。迭代器有两个方法:iter()和next()方法

    1.3案例演示: 以下是一个简单的迭代器示例,遍历一个列表并打印每个元素:

    1. class MyIterator:
    2. def __init__(self, data):
    3. self.data = data
    4. self.index = 0
    5. def __iter__(self):
    6. return self
    7. def __next__(self):
    8. if self.index >= len(self.data):
    9. raise StopIteration
    10. item = self.data[self.index]
    11. self.index += 1
    12. return item
    13. my_list = [1, 2, 3, 4, 5]
    14. my_iter = MyIterator(my_list)
    15. for item in my_iter:
    16. print(item)

    1.4迭代器总结

    1. 凡是可作用于for循环的对象都是Iterable 类型;

    2. 凡是可作用于 next() 函数的对象都是Iterator 类型;

    3. 集合数据类型如list 、dict、str等是 Iterable但不是Iterator,不过可以通过 iter()函数获得一个Iterator对象

    特点:

    • 允许按顺序访问集合中的元素。
    • 可以在不加载整个集合到内存中的情况下处理大型数据集。

    优点:

    • 节省内存,特别适用于大型数据集。
    • 提供了一种通用的遍历机制,适用于各种不同类型的数据结构。

    缺点:

    • 需要手动实现__iter__()__next__()方法,有些繁琐。
    • 一旦迭代器遍历完数据,就不能再次使用,需要重新创建。

    2. 生成器(Generator)

    介绍: 生成器是一种特殊类型的迭代器,它可以以更简洁的方式生成值。

    案例演示: 以下是一个生成器示例,生成斐波那契数列:

    1. def fibonacci():
    2. a, b = 0, 1
    3. while True:
    4. yield a
    5. a, b = b, a + b
    6. fib = fibonacci()
    7. for _ in range(10):
    8. print(next(fib))

    特点:

    • 使用yield关键字简化了迭代器的创建。
    • 延迟生成值,节省内存。

    优点:

    • 更简洁的语法。
    • 适用于处理大量数据或需要延迟生成的情况。

    缺点:

    • 不支持双向遍历,只能单向前进。
    • 无法随机访问元素。

    3. 装饰器(Decorator)

    介绍: 装饰器是一种用于修改函数或方法行为的技术,允许在不修改原始函数代码的情况下添加额外的功能。

    案例演示: 以下是一个装饰器示例,用于测量函数执行时间:

    1. import time
    2. def timing_decorator(func):
    3. def wrapper(*args, **kwargs):
    4. start_time = time.time()
    5. result = func(*args, **kwargs)
    6. end_time = time.time()
    7. print(f"{func.__name__} took {end_time - start_time} seconds to run.")
    8. return result
    9. return wrapper
    10. @timing_decorator
    11. def slow_function():
    12. time.sleep(2)
    13. slow_function()

    特点:

    • 可以轻松地扩展函数的功能,例如日志记录、性能分析等。
    • 可以重用装饰器,使代码更干净。

    优点:

    • 提高了代码的可维护性和可读性。
    • 使功能扩展更容易。

    缺点:

    • 可能会增加代码的复杂性,特别是当多个装饰器堆叠时。

    二.一闭 

    4. 闭包(Closure)

    介绍: 闭包是一种函数,它可以访问其定义范围之外的变量,即使外部函数已经执行完毕。

    案例演示: 以下是一个闭包示例,创建一个计数器函数:

    1. def counter():
    2. count = 0
    3. def increment():
    4. nonlocal count
    5. count += 1
    6. return count
    7. return increment
    8. counter1 = counter()
    9. print(counter1()) # 输出1
    10. print(counter1()) # 输出2
    11. counter2 = counter()
    12. print(counter2()) # 输出1

    特点:

    • 允许函数保留状态,使得函数可以"记住"之前的状态。
    • 有助于隐藏数据,实现封装。

    优点:

    • 提供了一种轻量级的状态管理机制。
    • 使函数更加灵活和可复用。

    缺点:

    • 可能会导致不正确的行为,特别是当闭包不正确地使用时。
    • 可能会增加代码的复杂性,难以理解。

    总结:

     一闭三器属于进阶语法,我们需要有强大的基础才能实际开发中运用,当我们运用得当,它能成为我们很实用的工具,为我们减轻很多代码,以及提示代码的质量

  • 相关阅读:
    DETR:End-to-End Object Detection with Transformers
    kubernetes使用glusterfs
    随机颜色生成器
    2205,2228,2230,2238,2292
    [解题报告] CSDN竞赛第六期
    shell 脚本变量
    我用Axure制作了一款火影小游戏 | PM老猫
    OpenGL - Bloom
    基于PHP+MySQL的物流配送管理系统平台
    Mac本安装objection
  • 原文地址:https://blog.csdn.net/weixin_73320743/article/details/133129539