python 模块与包的导入

发布时间:2020-06-18 20:07:46 作者:元婴期
来源:网络 阅读:586

一、模块

何为模块?

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

为何使用模块?

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

推荐阅读:
  1. Python基础(八)
  2. Python模块化

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

模块 name

上一篇:微服务API网关 vs. 传统企业级API网关

下一篇:部署helm私有库

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》