文章目录
1. 生成式详解
- 列表生成式就是一个用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list。
普通的语法格式:[exp for iter_var in iterable]
带过滤功能语法格式: [exp for iter_var in iterable if_exp]
循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
- 字典生成式:用来快速生成字典;
集合生成式:用来快速生成集合;
1.1 列表生成式
列表生成式:
1.需求:生成100个验证码(4个字母组成的验证码)
1.1 普通:
import string,random
codes = []
for count in range(100):
code = "".join(random.sample(string.ascii_letters,4))
codes.append(code)
print(codes)
1.2列表生成式:
codes = ["".join(random.sample(string.ascii_letters,4)) for i in range(100)]
print(codes)
列表生成式:
2.需求:找出1-100之间可以被3整除的数
2.1普通:
nums = []
for num in range(101):
if num%3 == 0:
nums.append(num)
print(nums)
2.2列表生成式:
nums = [num for num in range(101) if num%3==0]
print(nums)
1.2 字典与集合生成式
练1:
s = {
1,2,3,4,5,6,7}
集合生成式
print({
i**2 for i in s})
#{1, 4, 36, 9, 16, 49, 25}
字典生成式
print({
i:i**2 for i in s})
#{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49}
练2:
集合生成式
s = {
1,2,3,4}
print(sorted({
i**2 for i in s}))
#[1, 4, 9, 16]
字典生成式
result = {
i:i**2 for i in range(10)}
print(result)
#{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
2. 生成器与yield详解
-
什么叫生成器?
在Python中,一边循环一边计算的机制,称为生成器:Generator。 -
什么时候需要使用生成器?
性能限制需要用到,比如读取一个10G的文件,如果一次性将10G的文件加载到内存处理的话(read方法),内存肯定会溢出;但使用生成器把读写交叉处理进行,比如使用(readline和readlines)就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间。 -
如何创建生成器?
第一种方法: 列表生成式的改写。 []改成()
第二种方法: yield关键字。 -
如何打印生成器的每一个元素呢?
通过for循环, 依次计算并生成每一个元素。
如果要一个一个打印出来,可以通过next()函数获得生成器的下一个返回值。 -
生成器的特点是什么?
解耦
。爬虫与数据存储解耦;
减少内存占用
。随时生产, 即时消费, 不用堆积在内存当中;
可不终止调用
。写上循环, 即可循环接收数据, 对在循环之前定义的变量, 可重复使用;
生成器的循环,在 yield 处中断, 没那么占 cpu。
1.生成式的缺点:
需要等待长时间
会将值返回
num = [i**2 for i in range(1000)]
print