跳至正文
View Categories

1 min read

主要内容 #

  1. 包的定义
  2. 包的导入
  3. 模块帮助

1. 包的定义 #

在学习和工作中,我们要写很多模块文件,比如70多课的练习至少需要保存有70多个模块文件。 假如新建一个模块来使用这70多个模块,那么一个一个import模块会使用代码看起来很“丑”,而且可用性很差。 引入包的方法,可以解决此问题 Python中的包(Package),是将很多模块(module)放入一个目录中,再按目录来组织模块的方法。 从物理存储上看,包就是一个文件夹。 从逻辑上看,包的本质依然是模块。 所以,包可以认为是模块的集合,是比模块高一级的封装。 没有比包更高级别的封装,但是包可以嵌套包,就像文件目录一样。 导入包的方法和导入模块基本上一样,但是要注意,包里面必须要有一个__init__.py文件,否则会报错 默认情况下,在创建一个包的时候,文件__init__.py会自动生成。 新建一个包的步骤如下:
  • 鼠标右键工程文件,依次选择: New -> Python Package,如下图所示
  • 在弹出在窗口中输入包的名称,该示例输入名称为:mytools,如下图所示,办完后按回车键确定
  • 可以看到新建的包中自动生成了 __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. 小结 #

  • 包可以认为是模块的集合,是比模块高一级的封装
  • Python支持用from…import *的方式可以导入__init__.py模块里的__all__变量列表里限定的模块
  • 使用指令module.__all__可以快速了解某些指定模块(module)的所有函数的功能
  • 使用指令help(module.func)可以快速了解指定模块(module)的某个函数(func)的功能
  • OJ训练题 #

    1、数字之和为13的整数 – ★
    2、数根 – ★
    3、N个数的最大公约数 – ★
    4、鸡兔同笼 – ★★
    5、极速大回环 – ★★★★