Python高级——包与模块
模块
一、什么是模块?
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
二、为何要使用模块?
如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们可以把他们当做模块来导入到其他的文件中,实现了功能的重复利用。
三、如何使用模块?
1、首先自定义两个简单的.py文件
#t1.py
def t1():
print("t1")
def t_1():
print("t_1")
#t2.py
def t2():
print("t2")
2、使用import 或from...import...导入语句导入模块(由于我们的模块属于一个独立的全局命名空间,所以不用担心文件中的变量和模块中因为同名冲突)
import t1
t1.t1()
'''
执行结果输出t1
'''
from t1 import t_1
t_1()
'''
输出结果t_1
'''
可以同时导入多个模块,中间用“,”隔开。也可以用as关键字给导入的模块起别名:
import t1,t2
t1.t1()
t2.t2()
import t1 as t
t.t1()
t.t_1()
包
一、什么是包?
简单来说包就是一堆模块的集合,也就一堆.py文件。
包的本质就是一个包含init.py文件的目录。
二、包的作用
由于在Python中一切皆为对象, 想要好好理解包和模块,一定要先理解命名空间Namespace的概念。 命名空间是指标示符的可见范围。对于Python而言,常见的命名空间主要有以下几种:
Build-in Namespace (内建命名空间)
Global Namespace (全局命名空间)
Local Namespace (局部命名空间)
有了命名空间的概念,可以有效的解决函数或者是变量重名的问题。不同的命名空间中允许出现相同的函数名或者 是变量名。它们彼此之间不会相互影响,例如在Namespace A和B中同时有一个名为var的变量,对A.var赋值并不会改变B.var的值。同样,就算包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间。
所以包提供了一种很好的管理模块的方式,可以有效的减少模块的命名冲突。
三、创建一个包
1、在项目的根目录下创建一个package文件夹
2、在文件夹中新建一个__ init __.py文件(不管是哪种方式,只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的 __ init __.py文件,这个文件可以为空,但是也可以存放一些初始化包的代码)
3、在包中定义模块(.py)文件:这里我们将t1.py和t2.py放入package文件夹中
四、如何使用包
1、包也有import和from...import...两种方法导入,包的导入需要导入的模块文件
import package.t1 #import中出现点就是包的引用,模块的引用中出现点会报错
package.t1.t1() #执行结果是t1
'''
同样可以用as别名,这样可以简化名字
import package.t1 as t1
t1.t1()
'''
from package import t2
t2.t2() #执行结果是t2
'''
这里也可以用下面的方法引用
from . import t2
t2.t2()
'''
2、当我们想导入包中的所有模块,但是模块又很多用逗号隔开也会很麻烦,这是我们可以通过配置 __ init __ 文件,然后导入
#__init__.py
__all__ = ["t1", "t2"]
# 执行文件
from package import *
t1.t1()
t2.t2()
但是这样也会造成麻烦,导入的模块我们并不知道名字,不方便使用,所以当我们清楚包中的所有模块时再使用这种方法导入模块
那么对于包和模块的定义和使用方法大概就是这样,熟练掌握包和模块是Python高级的基础,也是重点