zoukankan      html  css  js  c++  java
  • 迭代器和生成器

    1. 迭代器

    列表、元组、字典和集合都是可迭代的对象,可以从其中获得迭代器。

    所有这些对象都可用iter()方法获取迭代器.

    例如:

    name = [1,2,3,4,5,6,7,8]

    name = iter(name)

    next(name)

    for i in name:

    print(i)

    >>> 2,3,4,5,6,7,8

    1. StopIteration

    name = [1,2,3,4,5,6,7,8]

    name = iter(name)

    while True:

    try:

    next(name)

    except StopIteration:

    break

    可以使用StopIteration语句停止迭代,for循环底层使用next进行调用并解决了StopIteration的问题

    1. 生成器

    2. 只要函数存在 yield关键字
    3. 启动生成器 next() 或者 for 或者send()

    使用生成器实现斐波拉契数列:

    def gen_fib(index):

    n,a,b = 0,0,1

    while n<index:

    yield b

    a,b = b,a+b

    n+=1

    for i in gen_fib(5):

    print(i)

    例如:

    def gen_func():

    yield 1

    return "name"

    gen = gen_func()

    print(next(gen))

    try:

    next(gen)

    except StopIteration as e:

    print(e.value)

    e.value 获取函数的返回值

    next(gen) 启动生成器yield,返回值为yield的值

    1. 生成器接收值

    def gen():

    print("start..")

    html = yield "www.baidu.com"

    print(html)

    yield 2

    return "end.."

    gen = gen()

    url_00 = next(gen) #启动第一个生成器,url_00是第一个生成器yield出来的值

    print(url_00)

    url_01 = gen.send("www.google.com") #传值给html ,并启动第二个生成器,url_01是第二个生成器yield出来的值.

    print(url_01)

    try:

    next(gen)

    except StopIteration as e:

    print(e.value) #获取函数返回值

    Result:

    start..

    www.baidu.com

    www.google.com

    2

    end..

    1. Send

    注意:在调用send的时候,如果这时没有启动过生成器,send需要发送 None 值

    例如:

    def gen():

    print("start..")

    html = yield "www.baidu.com"

    print(html)

    yield 2

    return "end.."

    gen = gen()

    url_00 = gen.send(None)

    print(url_00)

    url_01 = gen.send("www.google.com")

    print(url_01)

    result:

    start..

    www.baidu.com

    www.google.com

    2

     

  • 相关阅读:
    AcWing每日一题--最大的和
    使用 *args 和 **kwargs 的含义
    Python的八大基本数据类型之 元组、列表、字典
    条件判断与if嵌套
    数据拼接与转换
    print()函数与转义字符
    BEGIN-2 序列求和
    BEGIN-1 A+B问题
    并发编程——进程——生产者消费者模型
    并发编程——进程——进程的同步与数据共享
  • 原文地址:https://www.cnblogs.com/wenshu/p/12267153.html
Copyright © 2011-2022 走看看