首页 > 其他 > 详细

yield和生成器, 通过斐波那契数列学习(2.5)

时间:2019-02-02 21:35:36      阅读:214      评论:0      收藏:0      [点我收藏+]



实现斐波那契数列的集中方法

  1. 返回一个数

    def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a+b
        n += 1
    
    
    fib(5)
  2. 返回列表

    def fib(max):
    res = []
    n, a, b = 0, 0, 1
    while n < max:
        res.append(b)
        a, b = b, a+b
        n += 1
    return res
    fib(5)
  3. 使用可迭代对象

    from collections import Iterator
    class Fib(Iterator):
        def __init__(self, max):
            self.max = max
            self.index = 0
            self.a = 0
            self.b = 1
        def __next__(self):
            if self.index < self.max:
                res = self.b
                self.a, self.b = self.b , self.b + self.a
                self.index += 1
                return res
            else:
                raise StopIteration #  StopIteration()
        def __iter__(self):
            return self
    
    for x in Fib(5):
        print(x)
  4. 使用yield 生成器

    def fib4(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a+b
        n += 1
    
    f = fib4(5)
    
    for i in range(6):
        print(‘%s:  %s‘ % (i,next(f)))
  5. yield防止读大文件出现内存不够的问题

    def read_by_chunk(filename):
    BLOCK_SIZE = 1024
    with open(filename, ‘rb‘) as f:
        while True:
            block = f.read(BLOCK_SIZE)
            if block:
                yield block
            else:
                return
  6. 使用pandas读文件,类似5的操作

    import pandas as pd
    reader = pd.read_table(‘AA.csv‘, chunksize=1024)
    for chunk in reader:
        print(chunk)
  7. 使用pandas读文件,运行时才制定块大小

    import pandas as pd
    reader = pd.read_csv(‘AA.csv‘, sep=‘|‘, iterator=True)
    while True:
    try:
        chunk = reader.get_chunk(5)
        print(chunk)
    except:
        break

注: 参考了runoob

yield和生成器, 通过斐波那契数列学习(2.5)

原文:https://www.cnblogs.com/wangjiale1024/p/10349158.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!