今日主要内容:
1. 迭代器和生成器补充,
2. 生成器表达式和列表表达式. 以及各种推导式
3. 内置函数
1) 迭代器和生成器补充
1. 查看一个对像是否是可迭代的, 以及是否是迭代器. 还可以通过导入这两个方法来实现
示例:
- from collections import Iterable #导入看是否可迭代的对像
- from collections import Iterator #导入查看是否是迭代器
- s = "123"
- f = isinstance(s,Iterable)
- print(f)
- f2 = isinstance(s,Iterator)
- print(f2)
- """
- 运行结果是
- True
- False
- """
2. 可迭代对像的特点是内部含有__iter__这个方法, 迭代器特点是内部含有__iter__方法和__next__这个方法.
3. 如下示例: 注意生成器是如何生成的.
- def fun():
- for i in range(10):
- yield i
- gen= fun() # 这里的操作是生成一个生成器, 注意, 这里是并不执行的. 只是一个生成器.
4. 生成器有两种生成方法, 一种是函数中带有 yield, 即通过生成器函数来生成. 一种是通过生成器表达式来生成.
5. 可迭代对像变成迭代器的方法有如下两种.
一种 s.__iter__() 这个就是生成了迭代器
一种是 iter(对像) 这个通过 iter 函数来实现
6 迭代器的优点, 主要有如下三个优点:
一. 节省内存
二. 惰性机制
三. 单向不可逆
7. 通过 dir 来查看一个可迭代对像是否是可迭代的, 以及是否是生成器,
代码示例如下:
- s ="123"
- print("__iter__" in dir(s))
- print("__next__" in dir(s))
2). 生成器表达式和列表表达式. 以及各种推导式
首先看一下列表表达式, 示例如下:
- lst = ["校服 %s" % i for i in range(10)]
- print(lst)
具体的格式如下:
[变量 (加工后的变量) for 变量 in iterable] 循环模式
列表推导式有两种模式, 一种是上面说的循环模式, 一种是条件模式.
分类:
[变量 (加工后的变量) for 变量 in iterable] 循环模式
[变量 (加工后的变量) for 变量 in iterable if 条件] 筛选模式
下面是示例代码:
- #10 以内所有数的平方
- lst = [i**2 for i in range(11)]
- print(lst)
- #30 以内所有能被 3 整除的数的平方
- lst1 = [i*i for i in range(1,31) if i % 3 == 0 ]
- print(lst1)
- #100 以内所有的奇数.
- lst2 = [i for i in range(100) if i % 2 == 1]
- print(lst2)
生成器就是把 [] 换成 () 列表表达式就变成了, 生成器表达式.
如上面的代码换成生成器, 并且表现出来, 如下:
- #10 以内所有数的平方
- gen = (i**2 for i in range(11)) #生成一个生成器
- print(gen.__next__())
- #30 以内所有能被 3 整除的数的平方 #
- gen1 = (i*i for i in range(1,31) if i % 3 == 0 ) #生成一个生成器
- print(gen1.__next__())
- #100 以内所有的奇数.
- gen2 = (i for i in range(100) if i % 2 == 1) #生成一个生成器
- print(gen2.__next__())
- #v 如果想全部取出来的话, 可以用 for
- for i in gen2:
- print(i)
为什么有生成器:
生成器本身是自己用 python 代码构建的, 这样就满足了个性化需求, 满足以后你工作中需要.
下面有一个示例题:
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
获取上面列表中的名字里面有两个 e 的, 放在新的列表中.
示例代码:
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],['Alice
来源: http://www.bubuko.com/infodetail-2651806.html