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))







原文地址:https://www.cnblogs.com/Knge/p/13181936.html