1. 模块
1.1 模块的引入–import
格式:
import module1[, module2[,… moduleN]]
一个模块只会被导入一次,不管你执行了多少次。这样可以防止导入模块被一遍又一遍地执行。
准备工作:
新建两个py文件test.py和test2.py,分别写入以下代码
test.py
def printmodule1():
print("我是模块1")
def printmodule2():
print("我是模块2")
test2.py
import test
test.printmodule1()
test.printmodule2()
运行结果:
python中的内置模块还有很多,以下使用math模块演示
1.2 模块的引入–from…import 语句
格式:
from modname import name1[, name2[, … nameN]]
Python 的 from 语句可以让你从模块中导入一个指定的部分到当前命名空间中
我们还是使用在1.1中的例子,使用test.py和test2.py
注意:只能调用导入的模块中的部分,如果想使用test2,需要如下操作
把一个模块的所有内容全都导入到当前的命名空间也是可行的
格式:
from modname import *
1.2.1 扩展(all)
使用__all__魔幻方法
当被引入的包中有__all__=(),里面指定的才能被调用,调用的时候使用from模块名 import*
解决方法如下:
2. python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 init.py 文件, 该文件的内容可以为空。init.py 用于标识当前文件夹是一个包。
示例:
新建目录(testpackage)和文件(testinput.py)
目录testpackage新建成功后会自动生成一个init文件
这个init文件中是没有写任何东西的,需要我们自己写
在testpackage目录下新建一个test.py,然后将init、test、testinput文件中都写入代码,如下:
此时,我们就可以进行简单的测试了
在testpackage目录下的init文件中右击运行py文件
此时在程序入口中不会走else,所以会输出主程序已运行
而在和testpackage统计目录下的testinput文件中运行,效果如下:
你会发现调用testpackage目录下的test文件中的runoob1函数时,init文件中的else语句也执行了