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学习第十三章的主要内容,如果未能解决你的问题,请参考以下文章

《On Java 8》中文版 第十三章 函数式编程

WPF学习第十三章 理解路由事件

WPF学习第十三章 理解路由事件

2020-05-22 第十三章 支持向量机模型(python)

Python 第十三章 Django 之 FORM

Java学习笔记 第十三章 CSS