一、推导式
1.列表推导式
#条件+判断
list1=["data{}".format(i) for i in range(100) if i%2==0]
#结合三目运算
list2=[True if i%2==0 else False for i in range(100)]
2.字典推导式
dict1={f"key{i}":i for i in range(10)}
二、迭代器
1.可迭代对象Iterable
"""
能够进行迭代逐一返回其成员项的对象称为可迭代对象。 可迭代对象的例子包括
#所有序列类型 :如 `list`、 `str` 和 `tuple`
#非序列类型: `dict`、`set`、`文件对象`
#实现了 `__iter__()` 方法的任意对象(可迭代协议)
#实现了序列语义的 `__getitem__()`方法的任意对象。
**注意点:实现了`__getitem__`方法的被称为可迭代对象(支持迭代操作),但不是Iterable类型
"""
from collections.abc import Iterable, Iterator, Generator
class Mylist:
"""自定义的可迭代对象类"""
def __iter__(self):
return iter([11, 22, 33, 44])
class Mylist2:
"""自定义的序列类类"""
li = [11, 22, 33, 44, 55]
def __getitem__(self, item):
return self.li[item]
if __name__ == '__main__':
m = Mylist()
print(isinstance(m, Iterable))
#
# for i in m:
# print(i)
m2 = Mylist2()
# print(m2[0])
for i in m2:
print(i)
print(isinstance(m2, Iterable))
2.迭代器Iterator
"""
#1.1、迭代协议:对象定义了一个 `__iter__` 方法的,那么这个对象就实现了迭代协议,`__iter__`方法的返回值必须是一个迭代器
#1.2、迭代器协议: 迭代器协议由一个 `__iter__` 方法和`__next__`方法共同构成。实现了这两个方法的对象就实现了迭代器协议。
#1、对象实现了迭代协议的对象
#2、对象实现了`__next__`方法,`__next__`方法在迭代完所有数据之后,会抛出`StopIteration`的错误信息。
3、迭代器(Iterator)
# 1、实现了迭代器协议的对象,就是一个迭代器
# 2、所有的可迭代对象 都可以通过内置函数iter()转换为迭代器:
# 3、迭代器对象能够使用 内置函数next 进行迭代操作
# 4、所有的迭代器都是可迭代对象,因为迭代器协议包含了迭代协议
"""
#使用iter()方法可以将可迭代对象强制转换成迭代器
li1=iter([1,2,3])
print(next(li1))
print(li1.__next__())
三、生成器(元组没有推导式,元组推导式实际就是生成器)
生成器不保存数据,保存数据生成规则,节约内存
1.生成器表达式
ss=(i for i in range(10))
<generator object <genexpr> at 0x0000014EF438EB30>
#如何取生成器中的值
#方法1
print(next(ss))
#方法2
for i in ss:
print(i)
2.生成器函数:在函数中通过关键字yield来实现生成器函数
def func01():
print("----start----")
yield
print('----******----')
yield 'python'
print("----end------")
res = func01()
print(res)
---->
<generator object func01 at 0x000002C411D8E660>
res1=next(res)
print(res1)
---->
----start----
None
res2=next(res)
print(res2)
---->
----******----
python