模块
一 什么是模块
模块就是一组功能的集合体,可以通过导入模块来复用模块的功能。
比如我在同一个文件夹定义两个.py文件,分别命名为A.py和B.py,那么可以通过在A文件里通过import B来使用B文件里的名称空间。
python中,模块的使用方式都是一样的,可以分为四个通用类别:
使用python编写的.py文件
已被编译为共享库或DLL的C或C++扩展
把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
使用C编写并链接到python解释器的内置模块
二 为何要使用模块
从文件级别组织程序,便于管理
随着需求的增多,功能也会越来越多,为了方便管理,通常将程序分成多个文件,这样项目的结构会更加清晰,方便管理。这时不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现功能复用。
使用别人写好的模块,提高开发效率
使用别人已经写好的轮子,在自己的项目中使用,可以极大地提高开发效率。
注意:当退出python解释器的时候,重新进入那么之前定义的函数和变量都会丢失,因此通常将程序写到文件中以便永久保存,需要时可以在命令行通过python *.py方法执行。
# test1.py
print('from test1')
money = 10
def func1():
print('test1模块:', money)
def func2():
print('test1模块')
func1()
def change():
global money
money = 100
# test2.py
import test1
test1.func1()
# 运行结果
from test1
test1模块: 10
当在tes2t导入的时候会执行test1中的代码,所以首先会打印from test1接着执行test1中的func1函数。
三 使用模块之import
1 import的使用
模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次导入时才会执行(import语句可以在程序中的任意位置使用的,且针对同一个模块可以import多次,python为了防止重复导入,当第一次导入模块时就将模块的名称空间加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,并不会重复执行模块内的语句)
# test3
print('from test3')
# test4
import test3
import test3
import test3
import test3
# 运行结果
from test3
ps:可以导入sys模块,调用sys.module查看当前加载到内存中的模块,sys.module是一个字典,内部包含模块名和模块名路径的对应关系。该字典决定了导入模块时是否需要重新导入。
2 导入模块时发生了什么
运行py文件导入一个模块时,解释器做了三件事:
在执行文件中为被导入文件创建