三元运算是一个简单并且方便阅读的功能。可以部分替代if-else的写法
常规语法:
a = "晴天"
if a == "晴天":
action = "跑步"
else:
action = "睡觉"
语法:为真时的结果 if 判断条件 else 为假时的结果
a = "晴天"
action = "跑步" if a == "晴天" else "睡觉"
print(action)
生成器:在Python中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。
特点:迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter() 和 next()。
创建生成器:把一个列表生成式的[]改成(),就创建了一个generator。即:g = (i for i in range(5))
访问生成器的三种方式:
1、g.__next__()
2、next(g)
3、for 遍历。生成器常规使用最多,也是最推荐的使用方式。
创建生成器:
g = (i for i in range(5))
print(g)
访问生成器的 3种方式:
1、g.next()
2、next(g)
3、for 遍历
print(g.__next__())
print(next(g))
print("*" * 30)
for i in g:
print(i)
作用:生成器表达式是对内存空间的优化。他们不需要像方括号的列表解析一样,一次构造出整个结果列表。他们运行起来比列表解析式可能稍慢一些,因此生成器对于非常大的结果集合运算是最优的选择。
案例:psutil库需要安装。pip install psutil
import psutil
import os
import time
def run(data_type):
memory_list = []
start = time.time()
for i1 in range(10):
for i3 in data_type:
print(i3)
memory_list.append(psutil.Process(os.getpid()).memory_info().rss)
print('内存使用分别:', memory_list)
print('内存使用平均:', sum(memory_list) / len(memory_list))
print("总耗时:", time.time() - start)
if __name__ == '__main__':
l = [i2 for i2 in range(10000)]
run(l)
|