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