1迭代器和生成器;2模块和包
1迭代器
迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的iter()和next()方法。
其中iter()方法返回迭代器对象本身;next()方法返回容器的下一个元素,在结尾时引发StopIteration异常。
2生成器generator
在Python中,使用生成器可以方便的支持迭代器协议。
生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果,在每个结果之间挂起和继续它们的状态,来自动实现迭代协议。
也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护这挂起和继续的状态。
生成器函数返回生成器的迭代器。"生成器的迭代器"这个术语通常被称作"生成器"。
要注意的是生成器是一类特殊的迭代器。作为一个迭代器,生成器必须定义一些方法,其中一个就是next()。如同迭代器一样,我们可以使用next()函数获取下一个值。
在一个generator function 中,如果没有return,则默认执行至函数完毕,如果在执行过程中return,则直接抛出StopIteration 终止迭代。
2模块和包
1内置模块
本身就带有的库,就叫做Python的内置的库。(模块==库)
一些常见的内置模块:
os 和操作系统相关 os.path
sys 和系统相关 sys.path
sys.path.append(r' ') 可以添加路径
re 正则表达式
2第三方模块
非Python自带模块就是第三方模块
3模块的导入
import xxx [as yy]
from ../xx import xx [as yy]
4自定义模块
py文件,可以作为一个模块来用,直接作为一个模块导入
main的意义:
当文件是直接运行时,文件的name是main;
当文件被导入时,文件的name是文件名
5包管理
基本上就是另外一类模块。把用来处理的一类事物的多个文件放在同一文件夹下组成的模块集。
要让python将其作为包对待,在python2中必须包含init.py的文件,但在python3中不需要。不同的包下文件名相同也互不影响。
导入包和模块的方法是一样的。宝会在目录中自动生成pychache文件夹存放生成的.pyc文件,要注意的是import后面的才是存在当前域中的对象名,from则告诉你python从哪里导入。
使用sys.path添加文件的目录路径。
'''
1.文件:open, (r,w,a,+,x)
read readline readlines
write writelines
flush seek tell
close closed
2.异常: try except else finally. raise assert
'''
li = [0,2,4,6,8,10,12,14,16,18]
l2 = []
for i in range(20):
if i%2 ==0:
l2.append(i)
l3 = []
for i in range(0,20,2):
l3.append(i)
l4 = list(range(0,20,2))
l5 =[i for i in range(20)]
l6 =['aa' for i in range(20)]
l7 =[i for i in range(20) if i%2 ==0]
l8 = [i for i in range(20) if i%2!=0]
l8 = [i for i in range(20) if i%2==1]
l9 = [i if i%2==0 else 'a' for i in range(20)]
s = {i for i in range(10)}
di ={i:'jianeng' for i in range(10)}
'持迭代器协议就是实现对象的 __iter__() 和__next__()方法。'
li = iter(li)
type(li)
next(li)
'''
iter() 实现了 __iter__()
next() 实现了 __next__()
'''
'''
for :
1. iter() —> 迭代器
2. next() —> 迭代的取值
extend(iterable) -》iter() -》 next() ->append()
'''
def fun():
i = 0
while i<5:
print('***')
yield i
i +=1
print('+++',i)
next( fun() )
a = fun()
next(a)
a.__next__()
def fib(num):
n,a,b = 0,0,1
while n < num:
print(b)
a,b = b, a+b
n = n +1
def fib2(num):
n,a,b = 0,0,1
while n < num:
print(b)
if n%10 ==0:
yield
a,b = b, a+b
n = n +1
import keyword
from random import randint
from random import *
from random import _cos
import test
test.test()
test.test1
import os,sys
sys.path
sys.path.append(r'E:\16班基础\5高级专题')
import test2
test2.test()
test2.test1
import xml
import xml.dom
import xml.dom.domreg
sys.argv
import time
time.localtime()
time.asctime(time.localtime())
time.time()