Python学习路程——Day17
Python学习路程——Day17
目录
索引取值与迭代器的差异
'''
1、索引取值:
可以在任意位置,任意次数的取值,不支持无序类型的数据取值
2、迭代取值:
只能从前往后的依次取值,一旦开始取值无法后退,并且支持所有的类型取值(无序、有序)
两者的使用场景,需要结合实际的应用
'''
模块简介
1、模块的本质
'''
模块是指内部具有一定功能代码的py文件
'''
2、python模块的表现形式
'''
1、py文件,也可称为模块文件
2、含有多个py文件的文佳夹
3、已经被编译为共享库或者DLL的c、c++扩展
4、使用c编写并链接到python的内置模块
'''
模块的分类
'''
1、自定义模块:
我们自己所编写的模块文件
2、内置模块
python解释器提供的模块
3、第三方模块
别人写的py模块文件
'''
导入模块的两种句式
1、导入前要知道的事情
'''
强调:
1、一定要知道,谁是执行文件,谁知被导入文件
2、项目里面py文件的名称一般要用纯英文(最好不要用中文和空格)
3、导入模块文件不需要填写后缀名
'''
2、import句式
'''
底层原理
1、先产生执行文件的名称空间
2、执行被导入文件的代码,将产生的名字放入被导入文件的空间名称中
3、在执行文件的名称空间中产生一个模块的名字
4、在执行文件中使用该模块名加点的方式,使用名称空间中所有的名字
语法格式:
import 被导入的模块的文件名
'''
import user
3、from...import...句式
'''
1、先产生执行文件的名称空间
2、执行被导入文件的代码,将产生的名字放入被导入文件的空间名称中
3、在执行文件的名称空间中产生对应的名字绑定模块名称空间中对应的名字
4、在执行文件中直接使用名字就可以访问名称空间中对应的名字
语法格式:
from 需要导入的模块的文件名 import 需要使用的被导入模块内的名字
from 需要导入的模块的文件名 import * (*默认是将模块名空间中所有的名字都导入)
__all__ = ['名字1', ’名字2] (此方法可以限制*可以拿到名字)
'''
from user import name
导入模块补充说明
1、重复导入模块
'''
解释器只会导入一次,后续重复导入的语句并不会执行
'''
2、起别名
'''
语法格式:
import 被导入的模块的文件名 as 需要的名字
from 需要导入的模块的文件名 import 需要使用的被导入模块内的名字 as 需要的名字
'''
3、涉及到多个模块的导入
'''
可以将多个模块的文件名写在同一个import后面,中间用,号隔开
如果两个模块的功能相似,可以使用上述方法,功能相似度不高建议还是分开导入
'''
import user, manager
循环导入问题
1、循环导入
两个文件之间彼此导入,彼此相互使用各自名称空间中的名字
2、循环导入时的问题
如果我们所需要使用的名字在使用之前并没有准备好,那么就会出现无法找到名字的情况,就会报错
解决方法:在使用之前,确保使用的名字准备完毕
3、在我们日常编码的过程中,应该尽量的避免使用循环导入
判断文件类型
'''
__name__
所有的py文件都可以直接打印__name__的对应的值
eg:
当py文件时执行文件的时候,__name__所对应的值时__main__
当py文件是被导入文件的时候__name__对应的值是模块名
可以区分py文件是执行文件还是被导入文件的语法:
if__name__ == '__main__'
子代码
上述代码在py文件为执行文件的时候会运行子代码
使用场景:
1、模块的开发阶段
2、项目启动文件
'''
模块的查找顺序
'''
1、先从内存中找
2、再从内置模块中找
3、最后从sys.path中找(环境变量)一定要分清楚谁是执行文件谁是被导入文件
sys返回的是一个列表,里面放了一些文件的路径,但是第一个路径永远是文件所在的文件夹
注意:py文件的文件名不应该与模块名(内置的、第三方的)冲突
'''
绝对导入和相对导入
绝对导入
'''
绝对导入:
类似于绝对路径,把所需要导入的模块的地址一层层的写进去:
语法格式:
from 路径 import 模块名
书写的流程就是按照项目根目录一层层的点下去
'''
相对导入
'''
相对导入:
. 在路径中表示当前目录
.. 表示上一层目录
..\.. 表示上上一层目录
不在一句执行文件所在的sys.path(系统环境变量)而是以模块自身的路径为准
语法格式:
from . import user
相对导入只能使用于模块文件中,不能再执行文件中使用
相对导入使用的频率较低,一般使用绝对导入即可,结构更加清晰
'''
包
'''
可以理解为多个py文件的集合,即文件夹
内部含有__init__.py文件的文件夹(python2必须要求、python3中无所谓)
'''