Python的模块和包
下面学习下Python中的模块,看看什么是模块?为什么使用模块?
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py,这里可以理解为一个.py文件。当你的文件中引入了一个模块后,可以使用它的函数 、变量等。这也是使用 python 标准库的方法。这里的标准库指的是Python提供的一些通用模块,我们在实现一些功能时,可直接引入使用,不必再自己写,后面会单独写一篇Python提供的通用模块有哪些,这里不再赘述。
模块的导入
模块的导入一共有三种方式:方式一:
import module
方式二:
from module import funcname #函数
from module import fa, fb, fc #变量
from module import classname #类
方式三:
from module import *
模块重命名:
import time as t
导入的原理如下:
执行导入模块的代码的时候,会直接执行被导入的模块中所有的代码
a.重复导入问题 import在导入模块的时候会自动检测这个模块之前是否已经导入过,来避免一个模块的重复导入
b.阻止模块中的内容被其他模块导入
将不需要被其他模块执行的语句写入"if name == ‘main’:"对应的if语句中
下面我们来做个代码示例,首先定义一个模块:
def print_func( word ):
print "Hello : ", word
return
再写一个文件引入它:
# 导入模块
import MyFirstMoudle
# 现在可以调用模块里包含的函数了
MyFirstMoudle.print_func("zhangjianbo")
执行结果如下:
> python Mypython-27-1.py
Hello : zhangjianbo
包
下面来看下包的概念
包是一种管理 Python 模块命名空间的形式,采用"点"模块名称。比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块B。
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。
简单来说,包就是文件夹,但该文件夹下必须存在 init.py 文件, 该文件的内容可以为空。
包的导入方式
a 用户可以每次只导入一个包里面的特定模块,比如:
import sound.effects.echo
这将会导入子模块:sound.effects.echo。 他必须使用全名去访问:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
b 导入子模块的方法是: from sound.effects import echo
这同样会导入子模块: echo,并且他不需要那些冗长的前缀,所以他可以这样使用: echo.echofilter(input, output, delay=0.7, atten=4)
c 还有一种变化就是直接导入一个函数或者变量:
from sound.effects.echo import echofilter
同样的,这种方法会导入子模块: echo,并且可以直接使用他的 echofilter() 函数:
echofilter(input, output, delay=0.7, atten=4)
注意当使用from package import item这种形式的时候,对应的item既可以是包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量。
下面我们看一个简单的应用案例,我们来写一个包 .
首先建立一个文件夹,叫做MyFirstPackage,下面建三个文件 job1.py、job2.py、init.py 文件 如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TsbbXMld-1649847580055)(C:\Users\broker\AppData\Roaming\WeLink\appdata\IM\0000294496@csi\ReceiveFiles\ScreenShot\04831b15-7ff5-4773-8a2a-d0c39573a4e3.png)]
第二步 完善三个文件内容
job1.py
def job1():
print ("I'm in job1")
job2.py
def job2():
print ("I'm in job2")
init.py
if __name__ == '__main__':
print ('作为主程序运行')
else:
print ('MyFirstPackage 初始化')
然后我们在 MyFirstPackage 同级目录下创建 test.py 来调用 MyFirstPackage 包
from MyFirstPackage.job1 import job1
from MyFirstPackage.job2 import job2
job1()
job2()
运行结果如下图:
> python test.py
MyFirstPackage 初始化
I'm in job1
I'm in job2