Python 第四篇:生成器与迭代器

一:生成器:Generator是具有next方法的一个函数,

一个函数在执行的过程中产生一个迭代器,这个函数就是生成器,迭代器里面内容需要使用函数__next__()方法去读取,如:

def  func():
    with open("haproxy.cfg") as f:
        try:  #正常执行的 时候
            while True:
                line = next(f)
                print(line,end=‘‘)
        except StopIteration: #捕获到指定的异常抛出
            print("已经完成")
func()

执行结果:
global
        log 127.0.0.1 local2
        daemon
        maxconn 256
        log 127.0.0.1 local2 info
defaults
        log global
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        option  dontlognull

listen stats :8888
        stats enable
        stats uri       /admin
        stats auth      admin:1234

frontend oldboy.org
        bind 0.0.0.0:80
        option httplog
        option httpclose
        option  forwardfor
        log global
        acl www hdr_reg(host) -i www.oldboy.org
        use_backend www.oldboy.org if www

backend www.oldboy.org
        server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000

backend aaa
        server 100.1.7.9 100.1.7.91 weight 20 maxconn 3000backend test.oldboy.org
        server 100.1.7.999 100.1.7.999 weight 20 maxconn 30

backend test.oldboy.org
        server 100.1.7.33 100.1.7.33 weight 20 maxconn 30
        server 1.1.1.1 weight 20 maxconn 30
        server 100.1.7.999 100.1.7.999 weight 20 maxconn 30
已经读取文件完成--> #捕获到next()方法在执行时已经没有可读的行之后抛出的StopIteration错误后,执行了其下方的代码

next()

代器在运行中无法后退,只能向前走

时间: 2024-10-19 11:22:45

Python 第四篇:生成器与迭代器的相关文章

怒学Python——第四篇——函数与模块

Python的函数:其实和C++非常类似,不过由于是弱类型的语言(用起来感觉是......),把那些类型声明都去掉了,传的是值不是引用(至少2.7是),有一点点小区别是前面必须加def来定义(好像宏定义的样子......),下面给出示例 def sum(a, b): #sum为函数名,注意冒号...... c = a + b #这一部分是函数的语句块 return c #到这里函数就结束了,和C++一样 print sum(1, 2) #根据函数名调用函数,输出1+2的值 这里也有lambda函

python列表生成式、生成器,迭代器与二分法

一.列表生成式 列表生成式是快速生成一个列表的一些公式 列表生成式的书写格式:[x*x for x in range(1 , 11)] 列表生成式语法是固定的,[]里面for 前面是对列表里面数据的运算操作,后面跟平常for循序一样遍历去读取.运行后会自动生成新的列表 一般列表生成式 list1 = list(range(1,10)) #不使用列表生成式生成列表 list2 = [x for x in range(1,10)] #使用列表生成式生成列表 print(list1) print(li

python之路系列-生成器和迭代器-景丽洋老师

返回顶部 楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思考过,用索引取值和for循环取值是有着微妙区别的. 如果用索引取值,你可以取到任意位置的值,前提是你要知道这个值在什么位置. 如果用for循环来取值,我们把每一个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个直接去取其他位置的值. 但你有没有想过,我们为什么可以

python第四天装饰器+迭代器+生成器

1.函数嵌套:在调用一个函数的过程中,调用了其他函数 def f1(): x=1 def f2(): print('from f2') f2() f1()  2.名称空间与作用域 a. 名称空间:存放名字与变量值绑定关系的地方 (1)内置名称空间:在python解释器启动时产生,存放一些python内置的名字 (2)全局名称空间:在执行文件时产生,存放文件级别定义的名字. (3)局部名称空间:在执行过程中,如果调用了该函数则会产生该函数的局部名称空间.在调用该函数的时候生效,调用结束时失效 加载

python学习笔记之生成器和迭代器、内置函数

生成器 迭代器 内置函数 作业 一.生成器 1.1.列表生成器 问题引入:看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1 方案一: a = [1,3,4,6,7,7,8,9,11] for index,i in enumerate(a): a[index] +=1 print(a) 原值修改 方案二: >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> a = map(lambda x:x

初学Python——列表生成式、生成器和迭代器

一.列表生成式 假如现在有这样一个需求:快速生成一个列表[1,2,3,4,5,6,7,8,9,10],该如何实现? 在不知道列表生成式的情况下,可能会这样写: a=[1,2,3,4,5,6,7,8,9,10] 如果要每个值+1呢?可能会这样: for index,i in enumerate(a): a[index] +=1 print(a) 不够方便,这里讲一个快速生成列表的方法:列表生成式.意思就是立即生成列表. 生成一个1到10的列表: a = [i+1 for i in range(10

第五章:Python基础の何為生成器、迭代器和序列化

本課主題 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 本周作业 生成器介紹和操作实战 什么是生成器,生成器是一个对象,它具有生成指定条件数据成力的一个对象,它不会生成,当只有循还它的时候才会生成,在Python2.7 有一个range( ) 和xrange ( ) 函数,它们是负责生成数据的,range( ) 会直接在內存中生成一个有数据的列表,然后xrange( ) 会生成一个对象,当你循还它的时候才会生成数据,它会有

python高级编程-Part1 生成器和迭代器

迭代器和生成器是python学者们经常谈到的话题,我也不能免俗,因为实在值得总结一下.     迭代器 迭代器是对可迭代对象进行操作,通过next方法一次吐出一个元素的工具.我们用到的for..in..内部使用的就是迭代器功能. 如果要自定义一个迭代器类的话,需要满足下面的条件: 需要在类中定义__iter__方法返回self自身,表示这是一个迭代器: 需要定义next方法来返回迭代的值,其中应该包含StopIteration异常的判断 下面试着写一个自定义迭代器类的例子(模仿自Python高级

Behave + Selenium(Python) ------ (第四篇)

最近比较忙, behave的项目结束之后,又加入了一新项目,一开始说要用C#语言来写selenium自动化,后来跟客户确定使用QTP来写. 个人还是比较喜欢用C#语言和selenium框架的.因为qtp,市场上用的不多,发展前途受限制,再加上vbscript语言现在基本上没有人使用了. OK,开始进入主题: 今天我们开始讲讲behave的厉害的地方. Tag文件的使用 在behave里面,如何来控制哪些case需要run,哪些case不需要run,这个时候就用Tag来控制.好了,接下来我用Tag