【python基础】第24回 模块

本章内容概要

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

2. 模块简介

3. 导入模块的两种语法句式

4. import 句式

5. from...import..句式

6. 导入模块句式的其他用法

7. 循环导入问题

8. 判断文件类型

9. 模块查找顺序

本战内容详情

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

1.1 索引取值

print(l1[0])  # 11
print(l1[1])  # 22
print(l1[0])  # 11

1.2 迭代取值

res = l1.__iter__()
print(res.__next__())  # 11
print(res.__next__())  # 22
print(res.__next__())  # 33

1.3 对比优劣势

1. 索引取值

优势:可以随意反复的获取任意数据值

劣势:针对无序的容器类型无法取值

2. 迭代取值

优势:提供了一种通用的取值方式

劣势:取值一旦开始只能往前不能后退 ps:具体使用那个需要结合实际情况

2. 模块简介

2.1 如何理解模块

模块可以看成是一系列功能的结合体,使用模块就相当于拥有了这结合体内的所有功能。

2.2 模块的分类

1. 内置模块

解释器自带的,直接就可以使用的模块   eg: import time

2. 自定义模块

自己写的模块   eg: 注册功能,登录功能

3. 第三方模块

别人写的模块,存在于网络上,使用之前需要下载  eg: 图形识别,图形可视化,语言识别

2.3 模块的表现形式

1. py文件(py文件也可以称之为是模块文件)

2. 含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)

3. 已被编译为共享或DLL的C或C++扩展

4. 使用C编写并链接到python解释器的内置模块

2.4 python屈辱史

python刚开始出来的时候被其他编程程序员瞧不起,太简单 写代码都是调用模块(调包侠 贬义词)随着业务的扩展其他程序员也需要使用python写代码,写完之后发现python真香 贼好用(调包侠 褒义词)

为什么python很牛逼 :python之所以牛逼就是因为支持python的模块非常的多 非常的全 非常的猛

作为一名python程序员:将来接收到某个业务需求的时候 不要上来就想着自己写 先看看有没有相应的模块已经实现

3. 导入模块的两种语法句式

3.1 import句式 和 from...import..句式

3.2 py文件命名格式

真正的项目中,所有的py文件名称都是英文,没有所谓的编号和中文,学习模块的时候模块文件的名称就得用英文,py文件被当做模块导入的时候不需要考虑后缀

eg:
    01.模块    # 错误
    test.py    # 正确

4. import句式

4.1 句式

import md

# 执行文件是  02 模块的导入句式.py
# 被执行文件是 md.py

4.2 过程

1. 会产生执行文件的名称空间

2. 产生被导入文件的名称空间并运行该文件内所有的代码, 储存名字

3. 在执行文件中会获取一个模块的名字 通过该名字点的方式就可以使用到被导入文件 名称空间的名字

4. 同一个程序反复导入实践的模块,导导入语句只会执行一次

5. 被导入文件的名称空间什么时候结束,当执行文件不结束,被导入文件名称空间不关闭

4.3 代码讲解

# 02 模块的导入句式 代码
import
md # 执行文件是 02 模块的导入句式.py # 被执行文件是 md.py print(md.money) print(md.read1)
# md 代码
print('我是模块文件md.py')
money = 99
def read1():
    print('from md.py read1 function')
    print(money)
def read2():
    print('from md.py read2 function')
    read1()
def change():
    global money
    money = 66

 

# 同一个程序反复导入相同的模块 导入语句只会执行一次
import md   有效
import md   无效
import md   无效
# 带前缀 md才可以
money = 1000
md.change()
print(money)  # 1000
print(md.money)  # 66

5 from...import

5.1 句式

from...import...句式

5.2 过程

1. 创建执行文件的名称空间

2. 创建被导入文件的名称空间

3. 执行被导入文件中的代码 将产生的名字存储到被导入文件的名称空间中

4. 在执行文件中获取到指定的名字 指向被导入文件的命名称空间

5.3 代码讲解

from md import money  # 指名道姓的导入
print(money)  # 99
money = '嘿嘿'
print(money)  # 嘿嘿
# 多个
from md import money, read1
print(money)  # 99
read1()  # from md.py read1 function

6. 导入模块句式的其他用法

6.1 两种导入句式的优缺点

1. import md

优点:通过md点的方式可以使用到模块内所有的名字并且不会冲突

缺点:md什么都可以点 有时候并不想让所有的名字都能被使用

2. from md import money, read1

优点:指名道姓的使用指定的名字 并且不需要加模块名前缀

缺点:名字及其容易产生冲突(绑定关系2被修改)

6.2 起别名

1. 情况1:多个模块文件名相同(多人写相同的文件命名一样)

from md import money as md_my
from md1 import money as md1_my
print(md_my)
print(md1_my)

2. 情况2;原有的模块文件名复杂

import asdfjkasfhiouahsf  as md

6.3 导入多个名字

# 建议多个模块功能相似才能适应,不想似尽量分开导入
import time, aya , os
import time
import os
import sys
# 推荐使用的 因为多个名字出自于一个模块文件
from md import money, read1, read2    

6.4 全导入

# 需求:需要使用模块名称空间中很多名字 并且只能使用from...import句式
 from md import *  # *表示所有
#  ps:针对*号的导入还可以控制名字的数量
# 在模块文件中可以使用__all__ = [字符串的名字]控制*能够获取的名字

7. 循环导入问题

7.1 如何理解循环导入

循环导入就是两个文件彼此导彼此,

7.2 循环导入容易出现报错现象

使用彼此的名字可能是在没有准备好的情况下就使用了

7.3 如何解决循环导入保存现象

彼此在使用彼此名字之前 先准备好

7.4 总结

循环导入将来尽量避免出现!!! 如果真的避免不了 就想办法让所有的名字在使用之前提前准备好

8. 判断文件类型

1. 学习完模块之后 以后我们的程序运行起来可能涉及到的文件就不止一个

2. 所有的py文件中都自带一个__name__内置名

3. 当py文件是执行文件的时候 __name__的结果是__main__

4. 当py文件是被导入文件的时候 __name__的结果是模块名(文件名)

5. 在pycharm中可以直接编写main按tab键自动补全

__name__主要用于开发模块的作者测试自己的代码使用
if __name__ == '__main__':
当文件是执行文件的时候才会执行if的子代码

9. 模块查找顺序

9.1 查找顺序

1. 先去内存中查找

2. 再去内置中查找

3. 再去sys.path中查找(程序系统环境变量)

9.2 内存查找

导入一个文件 然后在导入过程中删除该文件 发现还可以使用,再次运行会报错

执行文件时相当于把文件放在内存上,删除的相当于硬盘上

 import md
 import time

 time.sleep(15)
 print(md.money)

9.3 内置查找

创建一个跟内置模块名相同的文件名,注意创建模块文件的时候尽量不要与内置模块名冲突

9.4 sys.path 查找  导入模块 的时候一定要知道谁是执行文件 所有的路径都是参照执行文件来的

import sys
print(sys.path)
'''
['G:\\pythonProject\\day22', 
'G:\\pythonProject\\day22',
 'G:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_display', 
 'G:\\Python38\\python38.zip', 
 'G:\\Python38\\DLLs', 
 'G:\\Python38\\lib', 
 'G:\\Python38',
 'G:\\Python38\\lib\\site-packages',
 'G:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

'''

# 添加路径
sys.path.append(r'D:\pythonProject\day22\xxx')

1. 通用的方式

py文件名.path.append(目标文件所在的路径)

2. 利用from...import句式

# 起始位置一定是执行文件所在的路径
from xxx(文件名) import mdd(py文件名)
posted @ 2022-07-13 18:09  |相得益张|  阅读(58)  评论(0)    收藏  举报