python模块的导入
一、模块的简介
1、什么是模块
Python 模块是一个 Python 文件,定义了各种功能接口。
2、为啥使用模块
把复杂的功能封装为模块(又称为库),将功能实现的细节隐藏起来,使用该模块(库)的程序员不需要了解实现的细节。通过调用模块封装好的功能,
可以用仅仅几行 Python 代码实现某项复杂的功能,例如可以用一行代码就实现一个 Web 服务器。
3、模块的来源
- 内置的(python解释器自带的直接用,eg:time)
- 第三方的(别人写好的放在网上的,我们要想用,必须先下载才能用)
- 自定义的(我们自己写的,以后也可以传到网上去)
4、在Python中,总共有以下四种形式的模块:
- 自定义模块:如果你自己写一个py文件,在文件内写入一堆函数,则它被称为自定义模块,即使用python编写的.py文件
- 第三方模块:已被编译为共享库或DLL的C或C++扩展
- 内置模块:使用C编写并链接到python解释器的内置模块
- 包:把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
二、模块的导入
1、导入语法
import 句式
首次导入文件,会执行导入文件的代码
导入文件不管你导入几次,都只执行一次
导入文件的过程发生了什么事?
1. 运行执行文件,产生执行文件的全局名称空间
2. 运行md.py文件,会产生md文件的全局名称空间,把md文件里的名字都丢到md的全局名称空间去
3. 在执行文件中有一个md的变量,指向导入文件的空间地址
4. 以后我们在执行文件中就可以用md来点出导入文件中的名字
导入文件之后,以后在用导入文件中的名字,只需要使用md点语法的形式点出来就可以
不会与执行文件中的名字发生冲突,因为我们是指名道姓的取值
from 模块名 import *”
from md import money,read1,read2 # 一个模块下的不同函数,连续导入直观
通用导入
# from md import money, read1, read2, change,
from 模块名 import *
2、起别名
import xxx as xx
from xxx import xx as x
3、设置禁止被导用的部分模块功能
方式1:
设置私有属性
单下划线“_”或者双下划线“__”开头的变量、函数和类
## 导入文件 def say(): print("人生苦短,我学Python!") def CLanguage(): print("C语言中文网:http://c.biancheng.net") def _disPython(): print("Python教程:http://c.biancheng.net/python") ##执行文件 from example import * say() CLanguage() disPython()

方式2:
只有以“from 模块名 import *”形式导入的模块,当该模块设有 __all__ 变量时,只能导入该变量指定的成员,未指定的成员是无法导入的。
## 导入文件 def say(): print("人生苦短,我学Python!") def CLanguage(): print("C语言中文网:http://c.biancheng.net") def disPython(): print("Python教程:http://c.biancheng.net/python") __all__ = ["say","CLanguage"] ## 执行文件 from example import * say() CLanguage() disPython()

###以“import 模块名”的形式导入模块,__all__ 变量即便设置,也形同虚设。 import example example.CLanguage() example.disPython() example.say() ### 以“from 模块名 import 成员”的形式直接导入指定成员。使用此方式导入的模块,__all__ 变量即便设置,也形同虚设。 from example import say from example import CLanguage from example import disPython say() CLanguage() disPython()
三、if __name__ == '__main__':的理解
1、目的
在Python中,
if __name__ == '__main__':是一个常见的代码块,它的作用是使一个模块既可以被导入到另一个程序中,又可以作为一个独立的程序运行。具体来说,当一个Python文件被执行时,Python解释器会将该文件中的所有代码都执行一遍,包括定义函数、变量等等。而当一个模块被导入到另一个程序中时,该模块中的所有代码也会被执行一遍,这可能会导致一些不必要的问题。
为了避免这种情况,我们可以使用
if __name__ == '__main__':代码块。这个代码块中的代码只有在该文件作为主程序运行时才会被执行,而当该文件被作为模块导入时,这个代码块中的代码不会被执行。
2、案例
# example.py 导入文件 print('from example.py') def my_function(): print(__name__) if __name__ == '__main__': my_function() ## test.py 执行文件 import example as e # e.my_function() print(__name__)
结果:执行文件导入example模块,
my_function函数没有执行
print('from example.py') 立即执行
因为my_function函数做了 if __name__ == '__main__':条件判断,不会立马执行

要想执行被导入的函数,在执行文件中直接调用,没有了if条件,即可调用成功
import example as e e.my_function() print(__name__)