第九节课 迭代器生成器、模块和包
一、列表推导式
10以内的偶数
li=[0,2,4,6,8,10]
li=list(range(0,11,2))
也可以用循环
li=[] for i in range(0,11,2): li.append(i)
print(li)
也可以用列表推导式
原式: li=[] for i in range(21): if i%2==0: li.append(i) 相当于: li2=[i for i in range(21) if i%2==0] #第一个i相当于append后的那个元素 li3=['a' for i in range(21) if i%2==0] #如果你是偶数,就在列表里加一个'a' li4=[i if i%2==0 else 'a' for i in range(21)] #若满足偶数则添加一个i,否则就添加一个'a'.要添加多个条件必须把for放后面
二、迭代器和生成器
1、迭代器
迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法。
其中__iter__()方法返回迭代器对象本身;__next__()方法返回容器的下一个元素,在结尾时引发StopIteration异常。
li=[1,2,3] # 只有iter,没有next,就不是一个迭代器 li[1] #返回索引1的元素,2 li.__iter__() #将li返回为迭代器本身(将li变成一个迭代器),有个内饰函数iter作用一样 g=li.__iter__() #赋值 内置函数:next() next(g) #返回索引0的值,实现迭代器的作用,跟g.__nest__()作用一样 next(g) #返回索引0的值 next(g) #返回索引0的值 next(g) #报错StopIteration 备注:必须将iter()后的值赋值给一个变量,否则会重新定义 循环: g=iter(li) for i in g: print(i,end=' ') 输出:1 2 3
2、生成器 generator
def fun(): i=1 while i<5: print(i) yield 'stop' #加了这边便将fun()变成一个迭代器,在调用next()是起到阻断器的作用(暂停),加了'stop'(类似于return对的作用,也会输出'stop')。总上言之,就是实现了生成器的功能:暂停,返回值 i+=1 print('aaa',i) next() #输出 1 next() #输出 aaa 2 2 next() #输出:aaa 3 3 生成器本质上是个迭代器
斐波拉契数 1,1,2,3,5,8,13,21,34,。。。 用生成器来写斐波拉契数 def fib(num): n=0 #表示几代 a,b=0,1 while n<num: print(b) #b表示那一代的量 if n%10==0: yield #加个生成器便可以一个一个看 a,b=b,a+b n+=1
三、模块和包
模块:py文件
包:很多py文件放在一个文件夹里
方法:函数
属性:变量名
1、内置模块
2、第三方模块
3、模块的导入
import copy #导入整个模块 from copy import deepcopy #导大模块里面的小模块,节省内存,指定导入
也可用cmd.exe的pip导入
4、自定义模块
相同路径:可直接导入文件名
不同路径:借助一个其他的模块sys sys.path会从你的python安装路径找
import sys #调用sys函数 sys.path #搜索您python文件夹里所有py文件的路径 sys.path.append(r'绝对路径') #将你的绝对路径导入 import 绝对路径里的模块 #然后就可以调用模块了
__main__ 的意义:
当文件是直接运行是,文件的__name__是__main__ ,当文件是被导入时,__name__是文件名