• 【Python】学习笔记十五:循环对象


    循环对象

    所谓的循环对象,包含有一个next()方法(python3中为__next__() ),这个方法的目的就是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误

    当一个循环结构(例如for)调用循环对象时,它就会每次循环的时候调用next()方法,直到StopIteration出现为止,for循环接收到,就知道循环已经结束,停止调用next()

    假设我们有一个文件data.txt

    My English is not good.
    My English isn't very well.
    I can speak a little English.

    运行python命令行

    >>>f = open('data.txt')

    >>>f.__next__()
    'My English is not good. '
    >>>f.__next__()
    "My English isn't very well. "
    >>>f.__next__()
    'I can speak a little English.'
    >>>f.__next__()
    Traceback (most recent call last):
       File "<input>", line 1, in <module>
    StopIteration

    open()返回的实际上是一个循环对象,包含__next__()方法,而该next()方法每次返回的就是新的一行的内容,到达文件结尾时举出StopIteration。这样,我们相当于手工进行了循环。

    自动循环如下:

    for data in open("data.txt"):
        print(data)
    
    在这里,for结构自动调用next()方法,将该方法的返回值赋予给line。循环知道出现StopIteration的时候结束

    生成器

    生成器(generator)的主要目的是构成一个用户自定义的循环对象.

    生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值。

    下面是一个生成器例子:

    def generator():
        a = 100
        yield a
        a = a*10
        yield a
        yield 10000
    该生成器共有三个yield, 如果用作循环器时,会进行三次循环。

    for i in generator():
        print(i)
    

    打印结果:

    100
    1000
    10000

    第二个生成器例子:

    def gen():
        for i in range(6):
            yield i
    

    调用生成器

    for j in gen():
        print(j)
    

    打印结果

    0
    1
    2
    3
    4
    5

    表推导

    表推导(list comprehension)是快速生成表的方法。它的语法简单,很有实用价值。

    表推导案例:

    L = [x**2 for x in range(4)]
    

    打印

    for i in L:
        print(i)
    

    打印结果

    0
    1
    4
    9


  • 相关阅读:
    mybatis关键查询
    智能标签
    mybatis注解基础使用
    myBatis基础知识点
    Mybatis框架模糊查询
    python(7):sympy模块
    anaconda中的包如何传到pycharm中使用?
    python(6):Scipy之pandas
    python(5):scipy之numpy介绍
    python(4): regular expression正则表达式/re库/爬虫基础
  • 原文地址:https://www.cnblogs.com/OliverQin/p/7727381.html
Copyright © 2020-2023  润新知