zoukankan      html  css  js  c++  java
  • 生成器

    #!/usr/bin/python
    #-*-coding:utf-8 -*-

    '''
    生成器函数: 只要函数体内包含yield关键字,该函数就是生成器函数

    '''
    #
    # def foo():
    # return 1
    # return 2
    # return 3
    # res=foo()
    # print(res)
    #多次执行,结果都是1
    #******return的特性 只执行一次,函数就终止了

    # def foo():
    # yield 1
    # yield 2
    # yield 3
    # res=foo()
    # print(res)
    # print(next(res)) #1
    # print(next(res)) #2
    # #打印结果
    # #<generator object foo at 0x0000026CFCDF68E0> 生成器的内存地址
    # res.__iter__() #可迭代对象
    # res.__next__()#迭代器
    # #由上可见 yield 直接把函数变成了一个迭代器
    #如下函数 猜想打印结果
    # def foo():
    # print('first')
    # yield 1
    # print('second')
    # yield 2
    # print('third')
    # yield 3
    # print('fourth')
    # foo()
    # g=foo()
    # # print(g)
    # #结果就是 啥也不打印
    # #结论:只要函数体内包含yield,再()执行就不会触发函数执行,只是得到一个迭代器,生成器的本质就是迭代器
    # #那么要想触发迭代器,就得next
    # # print(next(g))#会触发跌打器g的执行,进而触发函数的执行
    # # print(next(g))
    # # print(next(g))
    # for i in g:
    # print(i)
    #下面讲个小例子:
    # def counter(n):
    # print('start.....')
    # i=0
    # while i < 5:
    # yield i
    # i+=1
    # print('stop....')
    # g=counter(5)
    # print(g)
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))

    #总结yeild的特性:
    # 相当于为函数封装好了,__iter____next__方法,把函数做成了迭代器
    # return对比
    # return只能返回一次只,函数就终止了
    # yield 能返回多次值 每次返回都会将函数暂停,下一次next会从上一次暂停的位置往后继续执行
    # ##实例
    #管道 | 把左边命令的执行结果,作为右边命令的输入
    #tail -f access.log | grep python
    ##先实现tail -f access.log
    # import time
    # def tail(filepath):
    # with open(filepath,encoding='utf-8') as f:
    # f.seek(0,2)
    # while True:
    # line = f.readline().strip()
    # if line:
    # yield line
    # else:
    # time.sleep(0.2)
    # tail('aa.txt')
    # # temp=tail('aa.txt')
    # # print(next(temp))
    # ##然后实现| grep python
    # def grep(pattern,lines):
    # for line in lines:
    # if pattern in line:
    # print(line)
    # grep('python',tail('aa.txt'))
    #

  • 相关阅读:
    org.json里实现XML和JSON之间对象互转
    Rhino-- JavaScript
    XStream -- a simple library to serialize objects to XML and back again
    [Groovy]转:Groovy 通过 isCase 方法进行分类
    [Groovy]static typing
    JavaScript Succinctly 读后笔记
    [Groovy] Private fields and methods are not private in groovy
    Android 学习之路和App开发框架
    Android自定义xml解析
    Android 动态生成对话框和EditText
  • 原文地址:https://www.cnblogs.com/lazyball/p/6916647.html
Copyright © 2011-2022 走看看