主要内容 #
- 包的定义
- 包的导入
- 模块帮助
1. 包的定义 #
在学习和工作中,我们要写很多模块文件,比如70多课的练习至少需要保存有70多个模块文件。 假如新建一个模块来使用这70多个模块,那么一个一个import模块会使用代码看起来很“丑”,而且可用性很差。 引入包的方法,可以解决此问题 Python中的包(Package),是将很多模块(module)放入一个目录中,再按目录来组织模块的方法。 从物理存储上看,包就是一个文件夹。 从逻辑上看,包的本质依然是模块。 所以,包可以认为是模块的集合,是比模块高一级的封装。 没有比包更高级别的封装,但是包可以嵌套包,就像文件目录一样。 导入包的方法和导入模块基本上一样,但是要注意,包里面必须要有一个__init__.py文件,否则会报错 默认情况下,在创建一个包的时候,文件__init__.py会自动生成。 新建一个包的步骤如下:2. 包的导入 #
与在工程中新建.py文件的方法一样,鼠标右键点击包,依然选择 New -> Python File 此示例中,给新建的文件命名为:myabs,则会在包中生成一个myabs.py的文件,如下图所示: myabs.py文件(也可以认为是模块)的功能是返回参数的绝对值,程序如下:def myabs_func(parm): return abs(parm)再在包中新建一个.py文件,命名为myprint.py,该文件中的程序如下:
def myprint_func(parm): return "Hello "+str(parm)上述在包中建好的模块如下: 在工程中新建一个python文件(此示例命名为Test.py),可以在该python文件中导入mytools包,方法与导入模块一样 程序如下:
from mytools import myabs, myprint print(myabs.myabs_func(-100)) print(myprint.myprint_func("dashima"))仅仅用包的方法,也解决不了每个模块都需要from…import的问题。 但是,Python支持用from…import *的方式可以导入__init__.py模块里的__all__变量列表里限定的模块 如此,预先在__all__变量里指定了需要导入的模块,然后使用from…import * 的方法即可导入。 例如,在__init__.py模块里的程序如下:
__all__ = ["myprint"]在工程中的python文件可使用以下程序导入指定模块:
from mytools import * # 仅仅导入myprint模块,因为在列表__all__中只有myprint print(myprint.myprint_func("dashima")) # 正确,被导入 #print(myabs.myabs_func(-100)) # 错误,未被导入如果在__init__.py模块里的程序修改如下:
__all__ = ["myprint", "myabs"]则在工程中的python文件中可使用”myprint”和”myabs”:
from mytools import * # 导入myprint和myabs模块,因为在列表__all__中包含了这两模块 print(myprint.myprint_func("dashima")) # 正确,被导入 print(myabs.myabs_func(-100)) # 正确,被导入
3. 模块帮助 #
可以使用以下格式的指令快速了解指定模块(module)有多少函数: module.__all__ 注:某些模块是没有__all__变量的 比如,获取生成随机数模块random的函数:import random print(random.__all__) # 打印random模块的所有函数使用以下格式的指令快速了解指定模块(module)的某个函数(func)的功能: help(module.func) 比如:
import math print(help(math.tan)) # 打印math模块的tan函数的使用说明
4. 小结 #
OJ训练题 #
1、数字之和为13的整数 – ★
2、数根 – ★
3、N个数的最大公约数 – ★
4、鸡兔同笼 – ★★
5、极速大回环 – ★★★★