day14 列表生成式 生成器表达式 模块

https://shimo.im/docs/q4iInByvaMYoEwBS

egg_list=['鸡蛋%s' %i for i in range(10)] #列表解析

egg_list=['鸡蛋%s' %i for i in range(10) if i >2 ] #按条件筛选并列表解析

egg_list=('鸡蛋%s' %i for i in range(10) if i >2 ) #将中括号改成()就是生成器表达式了

生成的是生成器,所以他只是一个内存地址,要打印出来,需要将他转成列表,或者__next__取出下一个值

列表生成器的引用场景:将列表内的 所有元素都改成大写

列表生成式只能用在元素个数少的时候

生成器表达式是用在避免内存过大的时候

双括号简化成单括号

max((len(line) for line in f))
简化
max(len(line) for line in f)

什么是模块?
模块是系统功能的集合体

模块的四种类型
py文件即模块
解释器内置模块
把一系列模块放到同一个文件夹里,这个文件夹成为包(如果文件夹内有__int__.py)
共享库,dll或c++扩展

为什么使用模块
文件级别组织程序,方便管理
提高开发效率

import模块的执行流程
当前文件内执行,遇到import时,会运行模块文件
这时,内存里会出现2个命名空间
一个是当前文件的,一个是模块文件的命名空间
模块文件,将产生的名字存放于模块名称空间

模块文件内的变量引用在模块对应的命名空间中找,自己的空间中找不到再到当前执行文件的命名空间中找(如果有多个命名空间,那么去哪个空间找?)

模块被引用后,模块存在于内存空间,即使你删除了对应模块的文件
所以模块引用只需在全局引用一次,即使不同的作用域都能使用导入的模块

引用的三种模式
import 模块
直接引用模块,需要指名道姓地使用模块子功能 例:time.time()
import 模块,模块(不推荐)
import 模块 as 模块简称
直接引用模块的简称,用模块简称使用模块子功能 例:tm.time()
from 模块 import 模块子功能,模块子功能...
只引入模块里的子功能,以逗号分隔引入的多个子功能 例:time 调用加()
使用功能时直接用模块子功能的名字即可,但会和当前名称空间中相同的名字发生冲突


from 模块 import *
模块设计者可以设置想让*引入的功能名字:__all__=['功能名字','功能名字']

引入模块是不是引入模块文件?那么文件的越小速度越快?

__name__的值
在文件直接执行的情况下,等于‘__main__’
文件被导入的情况下,等于模块名


模块的搜索路径
import sys
print(sys.path)
打印出来的是列表
列表第一条是执行文件所在的文件夹的路径
pycharm中,列表第二条是pycharm多余给加的

模块的查找顺序
1.内存中已经加载的模块
2.内置模块
3.sys.path路径中包含的模块
sys.path是不是系统的path路径,如果不是,那么sys代表的是谁
执行文件在C盘,模块文件在D盘,这种怎么找?sys.path.append(r'绝对路径') 永久的还是存在内存里的

sys.path的第一个路径是当前执行文件所在文件夹的路径

原文地址:https://www.cnblogs.com/shanjinghao/p/8709497.html