今日学习
生成器
概念:含有__iter__()和__next__()方法的被迭代器
生成器和迭代器差不多,都可以通过next和for循环取值
生成器的创建
生成器通过yield 关键字创建,含有yield的都是生成器
生成器的执行过程:当调用next获取下一个值,按需取值,一次一值
def fun():
i=0
while True:
yield i
i += 1
取值
f=fun()
next(f) #0
next(f) #1
说明
当每次调用next的时候,才去函数中取值,yield返回值,并'冻结'在yield,直到下一次调用next的时候才会重新执行。
send()函数
作用
>>> def fun():
i=0
while True:
res=yield i
print(res)
i += 1
>>> f=fun()
>>> f.send(10)
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
f.send(10)
TypeError: can't send non-None value to a just-started generator
>>> f.send(None)
0
>>> f.send(2)
2
1
>>> 用法:obj.send(参数)
往生成器里面传值,并被yield接收
注意:当第一次用send传值的时候,只能传入None,否则会报错(第一次传入的值并没有被调用,但是不知道为啥会报错)
TypeError: can't send non-None value to a just-started generator
执行过程
生成器的每次传值的时候,都是先传入进行运算,在执行yield,也就是说,生成器先'冻结'在yield,等下次传值的时候,传入到接收的,执行下面的,直到再次碰到一个yield的时候,终止
优点
生成器:适用于大量的数据
减少了内存的损耗
说明文档
在模块最上面用三引号输入的信息,就是本文的说明文档,可以被以后导入本模块的方法来查看(模块名.__doc__)查看本模块的说明,在函数上加说明文档也是一样的,都是三引号。
dir() 查看所有的函数和变量的方法
__file__ 查看模块的路径
导入模块
简介:
模块的导入其实就是把模块的内容加载到内存中,然后赋值给一个模块名相同的变量,这个变量拥有模块的全部变量和方法。
方法
一:
import 模块名
模块名.函数(或变量)
二:
from 模块名 import 函数
函数(只能用导入的这个函数)
三:
from 模块名 import * (*代表导入模块的全部变量和方法)
函数(变量)(可以用模块的所有变量和方法)
解释
一般情况下,不去应用第三种导入,在python模块中,有的不需要被导入,在想要用第三种导入的时候,可以用
__all__=[]
往列表中添加你想要导入的包
包的概念
一堆.py文件的封装,在使用的时候,直接 包名.函数名 就可以使用
根据需求,可以自己封装包
构成
包下面都有一个__init__.py的文件,用于加载包的内置模块
__init__.py文件,在导入包的时候,默认执行,一般用来导入包中的模块
使用
from . import 模块名
from .模块名 import*
等等...
说明
.代表当前目录(其实感觉第一个没什么用,实际测试也确实没什么用,可能知识还不够)
类
对于我们平常的快捷操作,其实都是调用类里面的默认函数
__repr__ 用于返回对象的信息
__setattr__ 用于设置对象的信息(obj.attri=’‘)
__getattr__ 获取对象的值(相当于obj.属性)
__delattr__ 删除对象 (del obj)
__hasattr__ 判断是还不是属性或方法(hasattr(类,方法))
__del__ 析构方法,自动调用,程序执行结束之前