python模块与包的导入
一、模块
何为模块?
模块是最高级别的程序组织单元;在python中,模块一般是python或C或Java等语言编写的扩展文件,这个扩展文件可以被导入使用。
我们提供的服务有:网站制作、成都网站制作、微信公众号开发、网站优化、网站认证、西湖ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的西湖网站制作公司
为何使用模块?
模块首先是一个文件,这个文件可以在多种环境下任意次数地重新载入和重新运行,这就是说,模块可被重用;其次,模块作为python中最高级别的程序组织单元,在每一次导入时,客户端只需导入模块,就能使用模块定义的变量名以及变量名所引用的对象。
模块的导入前提
1、导入模块是由python自身提供的,在python标准链接库中。
2、模块导入的两个语句(import和from)
3、初次导入模块时,需要先找到要导入的模块文件,在sys.path的路径中
寻找。
4、python把载入的模块存储到sys.modules中,在每次导入操作开始前检查该字典,如果不存在,会执行导入操作,如果存在,不执行任何操作。
5、模块文件的选择:如要导入的模块在sys.path字典的第一个路径和第三个路径中同时出现,只会导入第一个路径中的模块。
模块导入之import语句
import将整个模块对象赋值给一个变量名
1、import 模块名
>>> import sys
>>> print(sys.path)
['', 'C:\\Python37\\python37.zip', 'C:\\Python37\\DLLs', 'C:\\Python37\\lib', 'C:\\Python37', 'C:\\Python37\\lib\\site-packages']
2、import 模块名 as 别名
>>> import sys as systemctl
>>> print(systemctl.path)
['', 'C:\\Python37\\python37.zip', 'C:\\Python37\\DLLs', 'C:\\Python37\\lib', 'C:\\Python37', 'C:\\Python37\\lib\\site-packages']
3、import 模块1,模块2
>>> import sys,os
模块导入之from语句
from将一个或多个变量名赋值给另一个模块中同名的对象
1、from 模块名 import 变量名
直接使用变量名就可以完成操作
如果本文件中有相同的变量名会发生冲突
>>> from sys import path
>>> print(path)
['', 'C:\\Python37\\python37.zip', 'C:\\Python37\\DLLs', 'C:\\Python37\\lib', 'C:\\Python37', 'C:\\Python37\\lib\\site-packages']
2、from 模块名 import 变量名字 as 别名
>>> from sys import path as systempath
>>> print(systempath)
['', 'C:\\Python37\\python37.zip', 'C:\\Python37\\DLLs', 'C:\\Python37\\lib', 'C:\\Python37', 'C:\\Python37\\lib\\site-packages']
3、from 模块名 import 变量1,变量2
>>> from os import path,kill
4、from 模块名 import *
将模块中的所有变量名都放到内存中
如果本文件中有相同的变量名会发生冲突
>>> from os import path,kill
5、from 模块名 import * 和all
没有all这个变量就会导入所有的变量
如果有all变量,只导入all列表中的变量
模块导入流程
1、先从sys.modules里查看是否已经被导入
2、在sys.path的目录中找到模块
3、创建这个模块的命名空间
4、把文件中的名字放入命名空间
何为模块命名空间
每一个模块就是一个命名空间,存在于模块之内的变量名就是模块对象的属性
1、模块语句会在首次导入时执行
2、顶层的赋值语句会创建模块属性
3、模块的命名空间能通过属性dict或dir()来获取
4、模块文件的作用域就是模块对象的属性的命名空间,即每一个模块都是独立的作用域
二、包
我们知道通过import和from语句可以导入模块,用法时直接在语句后跟要导入的模块名,那么我们如果要导入目录路径呢?也是可以的,python代码的目录就称为包,因此,这类导入称之为包导入。包导入是将要导入的目录创建为一个新的命名空间,目录中的子目录和模块文件就是命名空间的属性。
包的导入
包的导入与模块的导入类似,只是加上了目录层级
import dir1.dir2.pic
from dir1.dir2 import pic
导入包的路径与导入模块一致
就是说dir1所在的目录必须在sys.path中
init.py文件
包导入语句的路径中的每个目录内都必须有init.py文件,否则导入包就会失败;示例中dir1和dir2的目录下必须有init.py文件
包的初始化
导入包时,会自动执行该目录下init.py文件中的所有代码,因此这个文件是放置导入包时初始化的代码,比如写入导入其他目录及模块
包的相对路径导入
在上面的导入中,是从顶层目录向下逐步找到要导入的文件的,给出的是绝对路径;包也可以相对路径导入,类似于linux系统中 “.” 与“..”。
from ..import pic
相对导入只适用于包内部导入,且只适用于from语句
init文件中如使用相对路径导入,在包的外部导入没问题,在包内部使用也需使用相对路径
如使用绝对路径导入,在内部或外部使用都没问题
三、name变量
在模块中有个变量name
当我们直接执行这个模块的时候,name=='main'
当我们执行其他模块,在其他模块中引用这个模块的时候,这个模块中的name=='模块的名字'
文章标题:python模块与包的导入
当前链接:http://ybzwz.com/article/ggseee.html