导入模块、包

 

一、导入模块import


什么是模块:一个模块就是包含了python定义和声明的文件,文件名就是模块名字加上.py
但其实import加载的模块分为4个通用类别。
1 使用python编写的代码
2 已被编译为共享库或DLL的C或C++扩展
3 包好一组模块的包
4 使用C编写并链接到python解释器的内置模块
如何导入模块
同级目录下导入spam模块:

#spam.py 
money = 1000
import spam
print(spam.money)
#1000

执行这个导入命令会
1、执行导入的模块文件,并将模块名加载到内存,所以只有第一次导入才会执行
2、把这个模块中的名称空间当做全局名称空间
3、在当前位置拿到一个模块名,可以指向2中的名称空间(spam.money)
#为模块名起名

import spam as a 
print(a.money)
#1000

#一行中导入多个模块
import sys,os

二、导入模块from ... import ...


1、这种导入方式不必使用模块名加点的方式引用模块变量,直接使用变量名即可

from spam import money
print(money)
#1000

2、当前有重新定义的变量名则会覆盖模块中的变量名

from spam import money
money =1111
print(money)
#1111

3、from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。

在模块中使用
__all__=['money','read1']
则调用此模块时只有money和read1变量名可调用

 三、模块搜索路径

python解释器在启动时会自动加载一些模块,可以使用sys.modules查看

在第一次导入某个模块时(比如spam),会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用

如果没有,解释器则会查找同名的内建模块,如果还没有找到就从sys.path给出的目录列表中依次寻找spam.py文件。

所以总结模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块

需要特别注意的是:我们自定义的模块名不应该与系统内置模块重名。虽然每次都说,但是仍然会有人不停的犯错。 

在初始化后,python程序可以修改sys.path,路径放到前面的优先于标准库被加载。

原文地址:https://www.cnblogs.com/kunixiwa/p/7282513.html