Loading

模块

模块简介

  • 面向过程编程

面向过程编程就好比修筑一条产品流水线,一旦需要修改某项功能,那么需要整体改造

  • 什么是模块

模块就是一系列功能的结合体

  • 为什么要用模块

提升开发效率,调用他人开发好的模块

  • 模块的三种来源

1.内置的(python解释器自带的,能够直接导入使用)
2.第三方的(别人写好发布在网上,用前需要先下载后使用)
3.自定义的

方式一:通过pip安装命令:pip install 包名/模块名
方式二:pycharm安装步骤:
	Settings>>Project>>Python interpreter

image

  • 模块的四种表现形式

1.使用pycharm编写的代码(.py文件)
2.已被编译为共享库或DLL的C或C++扩展
3.包好一组模块的包(文件夹)

包其实就是多个py文件的集合,通常会含有一个__init__.py的文件
4.使用C编写并链接到python解释器的内置模块

import句式

import md # 导入的文件模块 文件后缀不要加

多次导入相同的模块,只执行一次

首次导入模板发生的事:
	运行导入文件(import句式.py)产生该文件的全局名称
	运行test.py文件
	产生test.py全局名称空间 运行test文件内代码 将产生的名字全部存档于test.py名称空间
	在导入文件名称空间产生一个test的名字指向test.py全局名称空间1.

image

from...import...句式

from md import money,read1,change
特点<指名道姓导入某个名字>
一旦模块名称空间的值与当前名称空间的名称冲突时,执行的是当前的名称名称空间的变量

from...import...  同样的导入多次,也只有一次起作用
1.先产生执行文件全局名称空间
2.执行模块文件 产生模块全局名称空间
3.将模块中执行之后产生的名字全部存档于模块名称空间中
4.在执行文件中有一个money执行模块名称空间中money指向的值
  • 起别名as

import md as a
from md import money as b

  • 连续导入

import 模块1,模块2...
from md import 名字1,名字2...

可以连续导入多个模块,但前提是要这些模块功能相似或者同属一个系列

  • 通用导入

from md import * # 将md中所有的名字全部导入

当然了,可以在模块文件中对*进行限制===》all = [名字1,名字2]

  • 判断文件类型

name__当文件是执行文件的时候会返回__main
如果文件是被当作模块导入则返回

循环导入问题

如果以后在导入模块的过程中出现了循环导入,那就说明程序设计的不合理,这种情况要规避掉

一旦出现这种问题,通常有两种解决方式
1.调换顺序,将彼此导入的句式代码放在后面
2.函数形式,将导入的句式放入函数体代码 等待所有名字加载完毕后再调用

模块导入顺序

1.先从内存中查找
2.再去内置函数中查找
3.最后去sys.path系统路径中查找

上述三条路径都没有查找到,就会报错
import sys
print(sys.path)  # 结果是一个列表,其中第一个元素永远是当前执行文件的路径

自定义模块导入问题
1.手动将自定义模块所在的路径,添加到sys.path中
	import sys
	sys.path.append(r'D:\')
2.使用from...import...句式
	from 文件夹名称.文件夹名称 import 模块名
	from 文件夹名称.模块名称 import 名字

绝对导入与相对导入

# 一个基准:一切路径都按照执行文件的路径为准
绝对导入
	始终按照执行文件所在的sys.path查找模块
	
相对导入
	句点式
		.表示当前路径
		..表示上一层文件路径
		
其中相对导入只能在模板文件中使用,不能在执行文件中使用
posted @ 2021-12-05 11:01  木子乐乐  阅读(21)  评论(0)    收藏  举报