python学习第十三章
Posted auxiaoliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习第十三章相关的知识,希望对你有一定的参考价值。
今日主要内容:
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‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]] lst = [name for i in names for name in i if name.count("e") ==2] print(lst)
各种推导式:
字典推导式:
以上是关于python学习第十三章的主要内容,如果未能解决你的问题,请参考以下文章