python 生成器yield 和 迭代器iter next 示例

Posted _刘文凯_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 生成器yield 和 迭代器iter next 示例相关的知识,希望对你有一定的参考价值。

python 生成器yield 和 迭代器iter next 示例

使用生成器和迭代器的好处是可以节省内存等。

生成器

生成器的示例:

def yield_func(num):
    while num < 10:
        yield num  ## 函数运行到这里会暂停
        num = num + 1
    return


if __name__ == '__main__':
    num = 1
    yield_f = yield_func(num)
    while True:
        next_ = input('>>')
        if next_ == 'next':
            print(next(yield_f)) ## 对应的第3行,会继续执行一次

运行结果:



迭代器

最简单的迭代器:

一般形式:

num = [1,2,3]
num_iter = iter(num)
for i in range(3):
    print(next(num_iter))

numpy:

import numpy as np
num = [1,2,3]
num = np.array(num)
num_iter = iter(num)
for i in range(3):
    print(next(num_iter))

pandas有些不同:

import pandas as pd
num = [1,2,3]
num = pd.DataFrame(num)
num_iter = iter(num)
for i in num.itertuples():
    print(i[1])

以上输出结果均为:

自己创建一个可以用于迭代器的类:

class myiter:
    def __init__(self, num):
        self.num = num

    def __iter__(self):
        self.next_num = self.num
        return self  # 固定写法

    def __next__(self):
        if self.next_num <= 10:
            x = self.next_num
            self.next_num += 1
            return x
        else:
            raise StopIteration


if __name__ == '__main__':
    num = 1
    my_next = myiter(num)
    my_iter = iter(my_next)  # 声明为迭代器

    for x in my_iter:  # 自动调用next函数
        print(x)

    print('------------')
    # ------------------------- #
    num = 1
    my_next = myiter(num)
    my_iter = iter(my_next)  # 声明为迭代器

    for i in range(10):
        print(next(my_iter))

结果:

以上是关于python 生成器yield 和 迭代器iter next 示例的主要内容,如果未能解决你的问题,请参考以下文章

python-迭代器(next(),iter()函数)和生成器(yield函数)

python 生成器yield 和 迭代器iter next 示例

python 生成器yield 和 迭代器iter next 示例

Python全栈之路8--迭代器(iter)和生成器(yield)

Python之生成器(generator)和迭代器(Iterator)

python迭代器生成器和yield语句