详解python的模块与包

发布时间:2019-11-24编辑:脚本学堂
本文介绍下,有关python中模块与包的相关知识,包括python模块与包的定义、使用方法。有需要的朋友一起研究下。

本节主要内容:
pythonmokuai/ target=_blank class=infotextkey>python模块和包

 - 引入其他模块
    - __name__
 - 搜索顺序
    - 自动编译被导入的模块
    - 搜索module的顺序???(待补充)

模块和包

1. 模块

 1.1 什么是模块
    -模块是python组织代码的基本方式
    -python的脚本都是用扩展名py的文本文件保存的.
     一个脚本可以单独运行, 也可以导入另一个脚本中运行.
     当脚本被导入运行时, 我们将其称之为模块(module)

 1.2 模块的导入
    -模块名与脚本的文件名相同
     -如,编写了 m1.py的脚本, 可以在 m2.py中以 import m1  导入
 
  1.2.1 导入的方式
   

  - import ...           导入模块
        - import packageName.moduleName
     - import ... as ...    导入模块,并起别名
        - import packageName.moduleName as alias
     - from   ... import ...导入指定模块的指定函数/属性
         - from packageName.moduleName import methodName

  1.2.2 举例 import

   1.2.2.1 导入-执行整个脚本
    目标: 在m2中导入m1, 执行m2
   

-----------m1.py-----------------------
    print "hello, I'm 1.py!!"
    ---------------------------------------

    -----------m2.py-----------------------
    import m1
    ---------------------------------------

    -----------output-----------------------
    E:desktoppythonpy_srcmyPack>m2.py
    hello, I'm 1.py!!
 

    ---------------------------------------
    注: 运行完毕后会生成m2.pyc的二进制文件,以便下次import

   1.2.2.2 导入-调用导入模块的函数

    目标: 在m4中导入m3, 执行m4
    说明: 内置属性 __name__ 存放当前正在运行的模块名
          "__main__" 表示当前模块  
   

复制代码 代码示例:

-----------m3.py-----------------------
    def add(num1, num2) :
        print num1 + num2

    def subtract(num1, num2) :
        print num1 - num2

    if __name__ == "__main__" :
        print __name__, " is running !!!"
        add(1, 2)
    ---------------------------------------

    -----------m4.py-----------------------
    import m3

    m3.add(10, 20)
    ---------------------------------------

    -----------output-----------------------
    E:desktoppythonpy_srcmyPack>m3.py
    __main__  is running !!!
    3
    E:desktoppythonpy_srcmyPack>m4.py
    30
    ---------------------------------------

  1.2.3 举例 import as
   

复制代码 代码示例:

-----------m3.py-----------------------
    def add(num1, num2) :
        print num1 + num2

    def subtract(num1, num2) :
        print num1 - num2

    if __name__ == "__main__" :
        print __name__, " is running !!!"
        add(1, 2)
    ---------------------------------------

    -----------m5.py-----------------------
    import m3 as moduleThree

    moduleThree.add(100, 200)
    ---------------------------------------

    -----------output-----------------------
    E:desktoppythonpy_srcmyPack>m5.py
    300
    ---------------------------------------

  1.2.4 举例 from  import 
   

复制代码 代码示例:

-----------m3.py-----------------------
    def add(num1, num2) :
        print num1 + num2

    def subtract(num1, num2) :
        print num1 - num2

    if __name__ == "__main__" :
        print __name__, " is running !!!"
        add(1, 2)
    ---------------------------------------

    -----------m6.py-----------------------
    from m3 import add

    add(11, 22)
    ---------------------------------------

    -----------output-----------------------
    E:desktoppythonpy_srcmyPack>m6.py
    33
    ---------------------------------------

2. 包
 2.1 什么是包
     -python的模块可以按目录组织为包,
      包里必须要有 __init__.py, 存放包的信息
     -即, 包就是文件夹, 用来组织模块的

 2.2 创建一个简单包的步骤
     - 创建 文件夹
     - 在该文件夹里 创建空的 __init__.py 文件
 
 2.3 使用包
  2.3.1 准备
     - 在 myPack文件夹 里 新建 __init__.py 文件(空的)
     - 在 myPack文件夹 里 新建 m1.py 文件
     - 在 与myPack文件夹 同级的目录 新新 m2.py文件

  2.3.2 组织结构
        py_src
          |-- m2.py
          |-- myPack
                |-- __init__.py
                |-- m1.py
 
  2.3.3 程序
   

复制代码 代码示例:

-----------m1.py-----------------------
    print "hello, I'm 1.py!!"
    ---------------------------------------

    -----------m2.py-----------------------
    import myPack.m1
    ---------------------------------------

    -----------output-----------------------
    E:desktoppythonpy_src>m2.py
    hello, I'm 1.py!!
    ---------------------------------------