码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 装饰器、迭代器、生成器


    1. # 生成器和迭代器类似,都是用来提供遍历的一种特殊数据结构。
    2. # 生成器不会占用大量的内存,只在遍历的时候会占用生成值的内存
    3. # 生成器的特点是使用yield关键字来返回值。
    4. def colors():
    5. """一个简单的生成器函数"""
    6. for color in ["black", "red", "green", "yellow", "blue"]:
    7. yield color
    8. if __name__ == '__main__':
    9. # 生成器可以直接用for遍历
    10. for color in colors():
    11. print(color)
    1. # 可迭代对象指的是可以通过for去遍历的对象。
    2. # 迭代器就是一种可以被遍历的对象,通常需要实现iter和next两个基本方法。
    3. # 需要注意的是,可迭代对象不一定是迭代器,但是迭代器一定是可迭代对象。
    4. arr = [1, 2, 3]
    5. iarr = iter(arr)
    6. print(type(iarr), iarr)
    7. # 取出数据
    8. print(next(iarr))
    9. print(next(iarr))
    10. print(next(iarr))
    1. # 装饰器是一种基于闭包的高级函数,一般是用来装饰函数或者类的方法,能够在函数的执行前后执行特殊的逻辑
    2. import time
    3. def spendtime(f):
    4. """一个统计方法执行时间的装饰器"""
    5. def inner():
    6. """接收外部的变量f,f本质上是一个函数"""
    7. print("方法执行之前")
    8. start = time.time()
    9. f() # 执行方法
    10. print("方法执行之后,统计消耗时间:", time.time() - start)
    11. return inner
    12. @spendtime # 使用装饰器
    13. def testf():
    14. """测试方法"""
    15. time.sleep(3)
    16. print("测试方法执行了。。。")
    17. if __name__ == '__main__':
    18. # 调用被装饰的方法
    19. testf()
    1. # 自定义迭代器类,必须要实现__iter__和__next__方法,
    2. # 其中__next__方法是最重要的,用于指定每次迭代要返回的值
    3. class A:
    4. def __init__(self, n):
    5. self.n = n
    6. self.count = -1 # 计数器
    7. def __iter__(self):
    8. """必须实现"""
    9. # 返回可迭代对象
    10. return self
    11. def __next__(self):
    12. """必须实现"""
    13. # 返回每一次迭代器计算出的结果
    14. # 调用next会自动执行此方法
    15. if self.count < self.n - 1:
    16. self.count += 1
    17. return self.count
    18. return None
    19. if __name__ == '__main__':
    20. # 创建可迭代对象
    21. a = A(3)
    22. # while 遍历
    23. while True:
    24. v = next(a)
    25. if v is not None:
    26. print(v)
    27. else:
    28. break
    29. # for 遍历
    30. a = A(3)
    31. for i in a:
    32. if i is None:
    33. break
    34. print(i)

    Python基础之高级函数

  • 相关阅读:
    电池电动汽车的健康状态 SOH 和充电状态 SOC 估计
    go中读写锁(rwmutex)源码解读实现原理
    CISP-PTE实操练习题讲解一(新版)
    前端、后端开发者常用到的免费API整理
    MasaFramework -- 领域驱动设计
    Python练习题:实现所有奇数长度子列表的和
    HTML静态页面获取url参数和UserAgent
    【树莓派不吃灰】Linux篇⑥ 正规表示法与文件格式化处理(核心概念)
    The following method did not exist (maven依赖冲突解决全记录)
    WPF 截图控件之绘制箭头(五)「仿微信」
  • 原文地址:https://blog.csdn.net/book_dw5189/article/details/134095202
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号