python(day8)
生成器(Generator)
是迭代器的一种实现,函数里面出现yield语句,即可定义为生成器。yield 相当于函数里面的 return 语句,但是普通函数的 return 一返回,这个函数就结束了,但是对于生成器来说,出现 yield,它就会把 yield 后面的参数给返回,然后就暂停在这个 yield 的位置,下一次执行就从这里开始。
def myGen():
print('生成器被执行')
yield 1
yield 2
>>>myg = myGen()
>>>next(myg)
生成器被执行
1
>>>next(myg)
2
协同程序
可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或重新开始
Python 是通过生成器来实现类似于协同程序的概念:生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后在再次调用它的时候,从上次暂停的位置继续执行下去。
-
列表推导式
n = [i for i in range(30) if not (i%2) and (i%3)]
>>>n
[2,4,8,10,14,16,20,22,26,28]
字典推导式
n = {i : i % 2 == 0 for i in range(8)}
>>>n
{0:True,1:False,2:True,3:Flase,4:True,5:False,6:True,7:False}
集合推导式
n = {i for i in [0,1,2,3,4,5,4,3,2,7,8,6]}
>>>n
{0,1,2,3,4,5,6,7,8}
生成器推导式
用圆括号()括起来的就是生成器推导式
生成器推导式如果作为函数的参数,可以直接写推导式就可以了,不用加圆括号
但是单独的生成器推导式,是一定需要括号的
模块
模块是更高级的封装
- 容器->数据的封装
- 函数->语句的封装
- 类->方法和属性的封装
- 模块->模块就是程序
保存每一个 .py 结尾的Python文件,就是保存了一个独立的模块
导入模块
- import 模块名
- import 模块名 as 新名字
- from 模块名 import 函数名(*)
if __ name__ = ‘__ main__’
让python知道该模块是作为程序运行还是导入到其他程序当中,就需要使用__ name__ 变量
如果是在主程序里面使用这个__ name__ 变量的话,那得到的是个‘__ main__’
如果是在模块中调用这个__ name__变量的话,那得到的就是这个模块的名字
>>>__name__
'__ main__'
>>>tc.__name__
'TemperatureConversion'
搜索路径
搜索路径就是一个列表,一组目录,我们可以通过sys模块中的path变量把它显示出来:
>>>import sys
>>>sys.path
目录
sys 是与系统相关的模块,Python 会从上面的路径中一个一个的去搜索有没有相关的模块。这里需要解释的是,不同的系统的 sys.path 显示的路径是不一样的,这里最佳的存放模块的位置是 ‘…\lib\site-packages’,该文件夹本来就是设置类存放模块的。
添加路径
import sys
sys.path.append('路径')
包(package)
- 创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字
- 在文件夹中创建一个__ init__ .py的模块文件,内容可以为空。#这是Python的规定,用来告诉Python,把这个文件夹(这个目录)当做一个包来管理。
- 将相关的模块放入文件夹中
- 导入包的模块:
import 包.模块名 as 新名字
import urllib.request语句
urllib是一个包,python把同类的模块放在一个文件夹中统一管理,这个文件夹称之为一个包
urllib是python负责管理URL的包,用于访问网址
如何区分一个文件夹是普通文件夹还是包
看文件夹中是否有__ init__.py的文件
PEP
Python Enhancement Proposals
Python 增强建议书
用来规范与定义Python的各种加强与延伸功能的技术规格
每个PEP都有一个唯一的编号,一旦给定不会再改变
PEP列表参考
模块.__ all__
说明这个模块可供外界调用的所有信息
模块.__ file__
指明了该模块源代码所在的位置
上一篇: Java空集合使用场景与填坑记录