zoukankan      html  css  js  c++  java
  • Python开发基础 day8 生成器 三元表达式 列表解析 生成器表达式

    #生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器

    def foo():
        print('first------>')
        yield 1
        print('second----->')
        yield 2
        print('third----->')
        yield 3
        print('fouth----->')
    
    g=foo()
    
    # print(g)
    # from collections import Iterator
    # print(isinstance(g,Iterator))

    #生成器就是迭代器

    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    
    # for i in g: #obj=g.__iter__() #obj.__next__()
    #     print(i)

    '''
    yield的功能:
        1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次值
        2.为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器
        3.遵循迭代器的取值方式obj.__next__(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的
    '''

    def countdown(n):
        print('starting countdown')
        while n > 0:
            yield n
            n-=1
        print('stop countdown')
    g=countdown(5)
    # print(g)
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    
    #
    # for i in g:
    #     print(i)
    
    
    #tail -f a.txt
    import time
    def tail(filepath,encoding='utf-8'):
        with open(filepath,encoding=encoding) as f:
        f.seek(0,2)
        while True:
            # f.seek(0, 2) #不行
            line=f.readline()
            if line:
                # print(line,end='')
                yield line
            else:
                time.sleep(0.5)
    
    g=tail('a.txt')
    print(g)
    print(g.__next__())
    #
    # for i in g:
        # print(i)
    
    #tail -f a.txt | grep 'error'
    
    
    def grep(lines,pattern):
        for line in lines:
            if pattern in line:
                # print(line)
                yield line
    # tail_g=tail('a.txt')
    # print(g)
    
    # grep_g=grep(tail_g,'error')
    
    # print(grep_g)
    #
    # print(grep_g.__next__())
    
    # for i in grep_g:
        # print(i)
    
    
    #tail -f a.txt |grep 'error' |grep '404'
    
    # g1=tail('a.txt')
    #
    # g2=grep(g1,'error')
    #
    # g3=grep(g2,'404')
    # for i in g3:
         #print(i)
    
     


    #生成器函数补充

    def countdown(n):
        while n > 0:
            yield n
            n-=1
    
    
    # g=countdown(5)
    # print(g.__next__())
    # print(g.__next__())
    #
    # print('='*20)
    # for i in g:
        # print(i)
    #
    # print('*'*20)
    # for i in g:
        # print(i)
    
     
    
    # for i in countdown(5):
        # print(i)
    # print('*'*20)
    # for i in countdown(5):
        # print(i)
    # print('*'*20)
    # for i in countdown(5):
        # print(i)
    
    
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    # print(countdown(5).__next__())
    
     
    
    # print(countdown(5),countdown(5),countdown(5))

    三元表达式:

     

    x=2
    y=3
    
    # if x > y:
         # print(x)
    # else:
        # print(y)
    
    
    # res='aaaaa' if x > y else 'bbbbbbb'
    #
    # print(res)
    
    
    # def max2(x,y):
        # # if x > y:
            # # return x
        # # else:
            # # return y
    #
        # return x if x > y else y
    #
    # print(max2(1,2))

    列表解析:

     

     

    s='hello'
    
    # l=[]
    # for i in s:
    #     res=i.upper()
    #     l.append(res)
    #
    # print(l)
    
     
    
     
    
    
    # l=[]
    # for i in range(10000):
    #     l.append(i)
    # print(l)
    
    
    # l=[1,2,3,4]
    # l_new=[]
    # for i in l:
    #     res=i**2
    #     l_new.append(res)
    # print(l_new)


    #列表解析:

    # s='hello'
    # res=[i.upper() for i in s]
    # print(res)
    
    
    # l=[1,31,73,84,57,22]
    # l_new=[]
    # for i in l:
    #     if i > 50:
    #         l_new.append(i)
    # print(l_new)
    
    # res=[i for i in l if i > 50]
    # print(res)
    
     
    
    # for i in obj1:
    #     if 条件1:
    #         for i in obj2:
    #             if 条件2:
    #                 for i in obj3:
    #                     if 条件3:
    # ...
    # l=[1,31,73,84,57,22]
    # # print([i for i in l if i > 50])
    # # print([i for i in l if i < 50])
    # print([i for i in l if i > 20 and i < 50])


    #生成器表达式

    # [i for i in range(1000000000000000000000000000000000000000000)]
    
    g=(i for i in range(100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000))
    
    print(g)
    print(next(g)) #next(g) == g.__next__()
    print(next(g)) #next(g) == g.__next__()
    print(next(g)) #next(g) == g.__next__()
    print(next(g)) #next(g) == g.__next__()
    print(next(g)) #next(g) == g.__next__()
    
     
    
     
    
    #len('hello') 'hello'.__len__()
    
    # print(len('hello'))
    # print('hello'.__len__())
    # iter(g) #g.__iter__()

     

     

     

     

  • 相关阅读:
    Echarts实现区级行政区划地图
    webpack4.x开发环境配置
    说说说vue.js中的组
    原生JS实现购物车功能详解
    面向对象的一些重要的基本概念
    Lucene教程
    开启事务时mybatis返回主键id
    生成二维码的方法,基于zxing
    mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入
    一:验证微信的Token
  • 原文地址:https://www.cnblogs.com/bsxq/p/7027947.html
Copyright © 2011-2022 走看看