#列表生成式
a = [i*2 for i in range(10)]
print(a) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
#生成器 generator 节省空间 不会立刻生成列表 只有在用的时候才会生成
b = (i * 2 for i in range(10))
print(b) #<generator object <genexpr> at 0x000000000216EE08> 不能直接访问列表中的元素,其实 他也不是列表 ,
#只能通过这种方式去元素 而且他只会保留一个元素 这样节省内存
ele = b.__next__()
print(ele)
print("===========")
for i in b:
print(i)
print("===========")
def fib(index):
n,a,b = 0,0,1
while n < index:
yield b
a,b = b,a+b
# a,b = b,a+b 并不是 先把a = b 然后计算 b = a+b 而是这样 tub=(b,a+b) a=tub[0],b = tub[1]
n+=1
return "这里会返回异常信息"
f = fib(10);
#next 方法到最后没有元素会报异常 只能去异常处理一下
print(f.__next__())
while True:
try:
x=next(f)
except StopIteration as e:
print("error",e.value)
break
迭代器
from collections import Iterable
from collections import Iterator
'''
集合类型 list,set ,dict,tuple ,str
生成式 generator
这些直接用于for循环的对象都是可迭代对象
可以被next函数调用并不断返回下一个值的对象成为迭代器 Iterator
'''
b = isinstance([],Iterable)
print(b)
b = isinstance((x for x in range(10)),Iterable)
print(b)
b = isinstance([],Iterator)
print(b)
b = isinstance((x for x in range(10)),Iterator)
print(b)
b = isinstance(iter([]),Iterator)
print(b)
序列化和反序列化
import json
import pickle
data = {"name":"zhangsan","age":18}
str = json.dumps(data)
print(str)
data2 = json.loads(str)
print(data2["name"])
print(data2["age"])
def func():
print("123123")
data = {"name":"zhangsan","age":18,"func":func}
str = pickle.dumps(data)
print(str)
data2 = pickle.loads(str)
print(data2["func"]())
本文探讨了Python中列表生成式、生成器、迭代器的概念及应用,详细讲解了如何使用列表生成式简化代码,生成器节省内存空间,以及迭代器的特性。同时,深入介绍了序列化和反序列化的实现,包括json和pickle模块的使用。
1128

被折叠的 条评论
为什么被折叠?



