python模块与包的导入-创新互联

一、模块

何为模块?

模块是最高级别的程序组织单元;在python中,模块一般是python或C或Java等语言编写的扩展文件,这个扩展文件可以被导入使用。

创新互联是一家专注于成都做网站、成都网站设计与策划设计,金台网站建设哪家好?创新互联做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:金台等地区。金台做网站价格咨询:13518219792

为何使用模块?

模块首先是一个文件,这个文件可以在多种环境下任意次数地重新载入和重新运行,这就是说,模块可被重用;其次,模块作为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=='模块的名字'

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:python模块与包的导入-创新互联
路径分享:http://pwwzsj.com/article/jgeeg.html