模块之理论

索引取值与迭代取值的差异

两种取值的方法需要结合实际应用场景

1.索引取值

l1 = [11,22,33,44,55]
两点:可以任意位置任意次数取值
      不支持无序类型的数据取值

2.迭代取值

只能从前往后依次取值无法后退
支持所有类型的数据取值(无序有序)

模块简介

1.模块的本质

内部具有一定的功能(代码)的py文件

2.python模块的历史

python刚开始的时候所有搞其他编程语言的程序员都看不起 甚至给python起了个外号>>>:调包侠(贬义词)
 	随着时间的发展项目的复杂度越来越高 上面那帮人也不得不用一下python 然后发现真的很好用>>>:调包侠(褒义词)

3.python模块的表现形式

1.py文件(py文件也可以称之为是模块文件)
 	2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
   3.已被编译为共享库或DLL的c或C++扩展
   4.使用C编写并链接到python解释器的内置模块

模块的三大分类

1.自定义模块    我们自己写的模块文件
2.内置模块    python解释器提供的模块
3.第三方模块    别人写的模块文件

导入模块的两种句式

1.import

2.from ...import...句式

1.以import a为例研究底层原理
2.以from a import name ,func1 为例研究底层原理
"""
1.先产生执行文件的名称空间
2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
3.在执行文件的名称空间中产生一个模块的名字
4.在执行文件中使用该模块名点的方式使用模块名称空间中所有的名字
"""
3.import与from...import...两者优缺点
import 句式
	由于使用模块名称空间中的都需要模块.名的方式才可以使用
    所以不会轻易的被执行文件中的名字替换掉
from...import...句式
	指名到姓的导入模块名称空间中需要使用的名字 ,不需要模块名点
    但是容易跟执行文件中名字冲突
   4.重复导入模块
	解释器只会导入一次,后续重复的导入语句并不会执行
 5.起别名
	import a
    import yiyi
    如果模块功能相似度不高,推荐使用第一种
    相似度高的可以使用第二种
    import a,yiyi

循环导入问题

1.循环导入
	两种文件之间彼此导入彼此并且相互使用各自名称空间中的名字,特别容易报错
2.任何解决循环导入问题
	1.确保名字在使用之前就已经准备完毕
    2.在编写代码的过程中要尽量避免出现循环导入

判断文件类型

所有的py文件都可以直接打印__name__对应的值
    当py文件是执行文件的时候__name__对应的值是__main__
    当py文件是被导入文件的时候__name__对应的值是模块名
 
if __name__ == '__main__':
    print('哈哈哈 我是执行文件 我可以运行这里的子代码')
 
上述脚本可以用来区分所在py文件内python代码的执行

使用场景
	1.模块开发阶段
 	2.项目启动文件
 
"""
from a import *  *默认是将模块名称空间中所有的名字导入
__all__  = ['名字1', '名字2']  针对*可以限制拿的名字
"""

模块的查找顺序

1.内存

import aaa
import time
time . sleep(15)
print(aaa,name)
aaa.func1()

2.内置

import time
print(time)
print(time.name)
'当我们在自定义模块的时候尽量不要与内置模块名'

3.执行文件所在的sys.path(系统环境)

一定要以执行文件为准!!!
我们可以将模块所在的路径也添加到执行文件的sys.path中即可
    import sys
    print(sys.path)  # 列表
    sys.path.append(r'D:\pythonProject03\day17\mymd')
    import ccc
    print(ccc.name)

绝对导入与相对导入

1.绝对导入

	from mymd.aaa.bbb.ccc.ddd import name  # 可以精确到变量名
	from mymd.aaa.bbb.ccc import ddd  # 也可以精确到模块名
 	可以按照项目根目录一层层往下查找

2.相对路径

	.在路径中表示当前目录
 	..在路径中表示上一层目录
 	..\..在路径中表示上上一层目录
	不在依据执行文件所在的sys.path 而是以模块自身路径为准
    from . import b
 	相对导入只能用于模块文件中 不能在执行文件中使用

posted @ 2022-10-18 20:48  梅梅小可爱  阅读(28)  评论(0)    收藏  举报