首页 > 编程语言 >python学习之---迭代器与生成器

python学习之---迭代器与生成器

时间:2024-07-18 16:51:50浏览次数:7  
标签:__ 迭代 python self 生成器 --- isinstance dp

什么是迭代器

  • 可迭代对象:
    可以通过for循环来实现遍历,例如list、string、dict
  • 迭代器:
    不仅可以使用for循环,还可以使用next()方法、__iter__()
    • next():获取容器中的下一个元素,当容器中没有可访问的元素后,next()方法将会抛出一个StopIteration异常终止迭代器
    • iter():
      内建函数获取迭代器对象

如何判断是迭代器

使用isinstance()函数来判断一个对象是否是一个已知的类型

from collections import Iterable, Iterator
# isinstance(对象, Iterable) 是否是可迭代的
# isinstance(对象, Iterator) 是否是迭代器
mylist = [1, 2, 3]
print(isinstance(mylist, Iterable))
print(isinstance(mylist, Iterator))

什么是生成器

  • 特殊的迭代器,通过函数来创建
  • 使用yeild来一次返回一个结果,而不是return
    • 生成器在执行到yeild语句时,会暂停生成器函数执行,并在下次执行时继续从上次暂停的位置开始

如何判断是否是生成器

同上通过isinstance()函数

斐波那契数列的各种实现方法

for循环实现法

n = int(input())
if n < 2:
   print(n)
else:
  dp = [-1] * (n + 1)
  dp[0] = 0
  dp[1] = 1
  for i in range(2, n + 1):
      dp[i] = dp[i - 1] + dp[i - 2]
  print(dp[n])

递归实现法

def fib(n):
    if n < 2:
        return n
    else:
        return fib(n - 1) + fib(n -2)
s = int(input())
print(fib(s))

迭代器实现法

class FibonacciIterator:
    def __init__(self):
        self.first = 1
        self.second = 1

    def method(self):
        pass

    def __iter__(self):
        return self

    def __next__(self):
        result = self.first + self.second
        self.first = self.second
        self.second = result
        return self.first


if __name__ == '__main__':
    fibo = FibonacciIterator()
    for i in range(int(input()) - 1):
        print(next(fibo))

标签:__,迭代,python,self,生成器,---,isinstance,dp
From: https://www.cnblogs.com/piaoduo-yf/p/18309931

相关文章

  • 2023HACSP-J补测
    都快忘了自己还打过这个比赛了,所以来补一下。完整题目在这里查看。Day0来到郑州,寻找考场。幸好提前来了,因为考场大门就5m宽(HA用不用这么穷啊喂,来JZYZ不好么),开车转了20min才找到。旅馆离考场很近,走路就能到。和zjyDALAO住隔壁,晚上去他那里写了一会题就去睡了。Day1早上......
  • Python web自动化爬虫-selenium/处理验证码/Xpath
    #coding:utf-8importtimeimportrandomfromtimeimportsleepfromcsvimportwriterfromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromchaojiyingimportChaojiying_Clientfromselenium.webdriverimportActionChainsdriver......
  • 第一章-化学计算基础总结
    字母:\(n:\)物质的量(单位:摩尔\(mol\))\(N:\)微粒数\(N_A:\)阿伏伽德罗常数\(m:\)质量(单位:克\(g\))\(M:\)摩尔质量(单位:克/摩尔\(g/mol\))\(p:\)压强(单位:帕\(Pa\))\(V:\)体积(单位:立方米\(m^3\))\(T:\)温度(单位:开尔文\(K\))\(R:\)气体常数\(x:\)物质的量分数\(c:......
  • uni-app的checkbox组件有些情况下视图层不更新解决方案
    应用场景问题:在使用uniapp的复选框组件checkbox实现列表的全选跟不全选功能时发现,列表的checkbox视图层在某些情况下不生效    解决方法 解决方案1:利用  this.$set改变数据,即 this.$set(item,'checked',false),这个时候视图层跟数据都一起更新了,但是在上面那种......
  • 【Python】通过Cython提升性能
    一、什么是Cython,如果你了解Python,就会知道Python相比于其他语言,性能差了不是一点半点。但是Python的底层实现大量使用了C语言,可以与C语言很好的结合。并且在Python中由于GIL全局解释器锁的机制,导致python在实现CPU密集型操作时非常吃力。Cython是Python的一个扩展,用于将Python代......
  • Python学习:Python数据类型大盘点
    Python的数据类型非常丰富,它们为编程提供了强大的工具来处理各种数据。以下是对Python数据类型的详细盘点:数值类型:整型(Integers):用于表示整数,可以是正数、负数或零。在Python中,整型可以表示的数值范围是平台特定的。浮点型(FloatingPointNumbers):用于表示带有小数部分的数......
  • 【Python】通过Cython提升性能
    一、什么是Cython,如果你了解Python,就会知道Python相比于其他语言,性能差了不是一点半点。但是Python的底层实现大量使用了C语言,可以与C语言很好的结合。并且在Python中由于GIL全局解释器锁的机制,导致python在实现CPU密集型操作时非常吃力。Cython是Python的一个扩展,用于将Py......
  • MySQL物理备份-XtraBackup远程备份恢复
    总括:模拟从库故障,从主库备份数据恢复从库,把主库数据远程备份到从库。1.主从库安装xtrabackup工具#安装依赖sudoyuminstallperl-DBIperl-DBD-MySQLperl-IO-Socket-SSLperl-Digest-MD5perl-TermReadKeyqpress#依赖包下载地址https://repo.percona.com/yum/releas......
  • 【Python】使用PySide6 + Qt Designer创建简易用户界面(含用户交互)
    【Python】使用PySide6+QtDesigner创建简易用户界面(含用户交互)文章目录【Python】使用PySide6+QtDesigner创建简易用户界面(含用户交互)相关代码运行环境操作过程1.PySide6和QtDesigner的安装2.创建外部工具PyUIC和QtDesigner3.QtDesigner的简单使用说明4.完整代......
  • Misc基础题目-BugKu-CTF
    第一部分misc1签到题目关注公众号即可获得flag{BugKu-Sec-pwn!}misc2这是一张单纯的照片看看属性中有没有CRC或者其他信息,并没有,然后用notepad++打开,看一下头部和尾部,发现unicode编码,解码得到key{youareright}misc3隐写binwalk,zsteg并没发现flag,stegsolve查看通......