day17 生成器, 面向过程, 三元表达式, 生成式
2024-09-02 14:19:49
1. 生成器
生成器:就是一种自定义的迭代器,是用来返回多次值
自定义迭代器的好处:节省内存 return只能返回一次值,函数就立即结束了
yield
1、可以挂起函数,保存函数的运行状态
2、可以用来返回多次值
例:
def func():
print('')
print('')
print('')
print('')
print('')
yield 1, 2
print('')
yield
print('')
yield 3
print('') 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))
最新文章
- 更改SQL Server 数据库的排序规则
- MySQL数据库8 -子查询,联合查询
- JVM性能调优
- 多个MapReduce作业相互依赖时,使用JobControl进行管理
- UVa 1467 (贪心+暴力) Installations
- JBoss 系列十一:JBoss Cluster Framework Demo 介绍
- SpringBoot 配置文件 application.properties
- LeetCode OJ 35. Search Insert Position
- Oracle存储过程经典入门
- UVA10692:Huge Mods
- Linux C启动时创建pid文件
- Linux系统下安装JDK
- 嵌入式 Web Server 温度检测系统
- 使用Memcached提高.NET应用程序的性能(转)
- POI各Jar包的作用(转)
- BZOJ 4566 JZYZOJ 1547 [haoi2016T5]找相同子串 后缀数组 并查集
- Python猴子补丁
- 多视几何——三角化求解3D空间点坐标
- Disruptor Ringbuffer
- ABP 学习系列 - 目录