模块

迭代取值与索引取值

l1 = [1, 2, 3, 4]
print(l1[0])  # run:1
print(l1[1])  # run:2
print(l1[2])  # run:3
print(l1[3])  # run:4
"""
相比起迭代取值只能按顺序取值不能回退,索引取值可以反复获取任意位置的数据值,但索引取值无法对无序容器类型取值,而迭代取值就可以,只能说各有优缺点,要根据需求选择
"""
res = l1.__iter__()
print(res.__next__())  # run:1
print(res.__next__())  # run:2
print(res.__next__())  # run:3
print(res.__next__())  # run:4

模块

  • 什么是模块
模块就是已经写好的可以直接使用的功能结合体,我们需要使用这种功能时,就不需要在写代码,直接通过使用模块就可以使用模块内的功能
  • 模块分类
1.内置模块
解释器自带的,使用解释器时就可以直接使用
eg:		import time
2.自定义模块
自己写的模块
3.第三方模块
别人写的模块,要在网络上下载,才能使用
eg:		图形识别	 语音识别
  • 模块的表现形式
1.py文件(也被称模块文件)
2.含有多个py文件的文件夹(按照模块的功能储存在不同的文件夹)
3.已被编译为共享库或DLL的c或C++扩展
4.使用C编写并链接到python解释器的内置模块
img

导入模块的两种句式

  • 导入模块的句式1
import 模块名称
"""
运行时先产生执行文件的名称空间,在产生被导入文件的名称空间并运行文件内所有代码,储存名字,要使用模块内名字时,在名字前面加模块名称+点,被导入文件的名称空间的名字绑定的数据值也可以通过加模块名称+点进行修改
"""
import ma  # run:被导入文件执行
print(ma.name)  # run:被导入文件的名字
ma.func()  # run:被导入文件的函数
name = '执行文件的名字'
print(name)  # run:执行文件的名字
print(ma.age)  # run:18
ma.age = 20
print(ma.age)  # run:20
  • 导入模块的句式2
from 模块名称 import 指定名字
"""
运行时先产生执行文件的名称空间,在产生被导入文件的名称空间并运行文件内所有代码,将名字储存到被导入文件的名称空间,在使用指定的模块内名字时,直接使用名字即可,执行时指向被导入文件的名称空间,但没有指定的名字则不能使用
"""
import ma
from ma import name  # run:被导入文件执行
print(name)  # run:被导入文件的名字
# print(age)  # run:报错  无法使用没有指定的名字
name = '执行文件的名字'
print(name)  # run:执行文件的名字
# 同样的名字会冲突,只能使用模块名称+点来区分
print(name)  # run:执行文件的名字
print(ma.name)  # run:被导入文件的名字
  • 两种导入方法的优缺点
import 模块名称
"通过模块名称+点方法可以用到模块内的所有名字且不会和执行文件名字相冲突,但有时候并不像让所有名字都能使用"
from 模块名称 import 指定名字
"只使用指定的名字且不需要j加模块名称+点,但名字会起冲突"
  • 补充
1.起别名
情况1:多个模块文件内名字相同
from ma import name as am_my  # run:ma文件执行
from mb import name as bm_my  # run:mb文件执行
print(am_my)  # run:ma文件的名字
print(bm_my)  # run:mb文件的名字
情况2:原有的模块文件名复杂
import Better bend than break as be
2.导入多个名字
import name, age
# 这种方式建议多个模块功能相似才使用,不相似尽量分开导入
import name
import age

from ma import name,age
# 这种方式建议使用,因为多个名字来自一个模块
3.全导入
form am import *  # *是所有的意思
"""
from...import...句式使用模块内的很多名字,可以使用*,也可在模块文件中使用__all__ = [字符串的名字]来控制*能获得的名字
"""
img

循环导入问题

import mb
print(mb.name)
name = 'ma文件的名字'

import ma
print(ma.name)
name = 'mb文件的名字'
"""
像这种两个文件彼此循环,彼此的名字在没有赋值就使用,会出现报错现象
循环导入尽量避免出现,如果真的避免不了,彼此的名字要在赋值后使用
"""
name = 'ma文件的名字'
import mb
print(mb.name)

name = 'mb文件的名字'
import ma
print(ma.name)

判断文件类型

"""
有时候程序运行起来涉及的文件不止一个
所有py文件都有__name__内置名时,当py文件是执行文件的时候__name__的结果是__main__,当py文件是被导入文件的时候__name__的结果是模块文件名
"""
if __name__ == '__main__':
    该文件是执行文件执行的子代码
else:
    该文件是被导入文件执行的子代码

模块的查找顺序

1.查找顺序
"""
先去内存中找>>>在去内置中找>>>再去sys.path(程序系统环境变量)中查找
"""
2.使用方法
2.1通用方法
sys.path.append(目标文件所在的路径)

import sys
import mb
sys.path.append('D:\PY01\mb.py')  # run:mb文件执行
print(mb.name)  # run:mb文件的名字

2.2使用from...import句式
起始位置一定是执行文件所在的路径
from 模块名称 import 指定名字

from mb import name  # run:mb文件执行
print(name)  # run:mb文件的名字
posted @ 2022-07-13 20:09  无言以对啊  阅读(49)  评论(0)    收藏  举报