zoukankan      html  css  js  c++  java
  • day17 生成器, 面向过程, 三元表达式, 生成式

    1. 生成器

      

    生成器:就是一种自定义的迭代器,是用来返回多次值
    自定义迭代器的好处:节省内存

    return只能返回一次值,函数就立即结束了
    yield
    1、可以挂起函数,保存函数的运行状态
    2、可以用来返回多次值
    例:
    def func():
        print('11111111111')
        print('11111111111')
        print('11111111111')
        print('11111111111')
        print('11111111111')
        yield 1, 2
        print('222212222222')
        yield
        print('3333333333333')
        yield 3
        print('44444444444')
    
    yield一次 返回一个值
    如何得到生成器(自定义的迭代器):
    函数内但凡存在yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是我们自定义的生成器
    def my_range(start, stop, step=1):
        while start < stop:
            yield start
            start += step
    
    # g=my_range(1,5)
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))
    # print(next(g))
    
    for i in my_range(1,5000):
        print(i)

    2.  面向过程编程思想

    1、编程思想就是编写程序的套路,与具体的技术点无关
    2、面向过程
    核心是过程二字,过程就是解决问题的步骤,即先干啥、再干啥、后干啥
    基于面向过程编程就好比在设计一条条的流水线

    优点:将复杂的问题流程化、进而简单化
    缺点:所有环节耦合到一起,环环相扣,如果要修改某个环境,有可能会牵一发而动全身,扩展性差

    3. 三元表达式

      

    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    
    
    res=max2(1,2)
    
    x=1
    y=2
    
    res=x if x > y else y
    print(res)
    
    
    res=条件成立时返回的值 if 条件 else 条件不成立时的返回值

    4. 生成式的使用

      

    1、列表生成式
    l=[]
    for i in range(11):
        if i > 3:
            l.append("x")
    可以写成:
    l = ["x" for i in range(11) if i > 3]

    例:

    names = ["egon_nb", "lxx_sb", "猴子_sb", "jason_sb"]
    
    l=[]
    for name in names:
        if name.endswith("sb"):  把结尾为'sb' 的取出
            l.append(name)
    
    l = [name for name in names if name.endswith("sb")]  


    names = ["lxx", "猴子", "jason"]
    print([name+"_sb" for name in names])
    2、字典生成式
    
    dic = {"name": "egon", "age": 18, "gender": "male", "level": 10}
    
    new_dic = {k.upper(): v for k, v in dic.items() if k != "level"}
    new_dic = {k+"_": str(v) for k, v in dic.items() if k != "level"}
    print(new_dic)
    3、集合生成式
    s = {i for i in "hello" if i != "l"}
    print(s)
    4、生成器表达式
    res = (i for i in range(5))
    print(res)
    
    
    print(next(res))
    print(next(res))
    print(next(res))
    print(next(res))
    print(next(res))
    print(next(res))







  • 相关阅读:
    java访问mysql方法数据库
    iOS8:把这些七招APP哭
    String、StringBuffer与StringBuilder差分
    陈词滥调,正确使用memset
    spring Annotation 组分注塑
    类是公共,它应该被命名为.java文件声明
    【UVA】10012
    Android在ListView显示图片(重复混乱闪烁问题)
    oc-15-枚举结构体
    oc-15-self
  • 原文地址:https://www.cnblogs.com/Knge/p/13181936.html
Copyright © 2011-2022 走看看