zoukankan      html  css  js  c++  java
  • &【13】Python 模块和包

    本文参考:

    纯洁的微笑:http://www.ityouknow.com/python.html

    模块与包是任何大型程序的核心,就连 Python 安装程序本身也是一个包。

    重点涉及有关模块和包的常用编程技术,例如如何组织包、把大型模块分割成多个文件、创建命名空间包。同时,也给出了让你自定义导入语句的秘籍。

    先给大家解释一下模块、包、库之间的概念:

    • 模块(module)其实就是 py 文件,里面定义了一些函数、类、变量等
    • 包(package)是多个模块的聚合体形成的文件夹,里面可以是多个 py 文件,也可以嵌套文件夹
    • 库是参考其他编程语言的说法,是指完成一定功能的代码集合,在 Python 中的形式就是模块和包

    模块其实一个 py 文件,用来封装一组功能;包是将一类模块归集到一起,比模块的概念更大一些;库就是由其它程序员封装好的功能组,一般比包的概念更大一些。

    下面我们来分开介绍:

    模块

    由上面的内容我们得知模块就是一个 py 文件,这个文本文件中存储着一组功能,方面我们再次使用的时候,提高代码的复用率。我们成这一个的一个 py 文件为 Python 模块(Module)。其他 Python 脚本中,通过 import 载入定义好的 Python 模块。

    定义和调用 Python 模块

    我们先来看如何定义一个 Python 模块。

    定义一个 hello.py 模块,内容如下:

    def sayhello(  ):
       print("Hello World!")

    通常我们使用 import 语句来引入模块,语法如下:

    import module1[, module2[,... moduleN]]

    当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。调用的时候使用 模块名.函数名 来进行调用

    以上的示例为例,我们新建 do.py 文件调用 hello.py 模块中方法。

    do.py 文件内容如下:

    # 导入模块
    import hello
    
    # 现在可以调用模块里包含的函数了
    hello.sayhello()

    一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

    在 do.py 页面执行快捷键 ctrl+b 控制台输出:Hello World!,证明调用 hello.py 中的方法成功。

    这就是一个模块的定义和调用的示例,是不是也很简单。

    from … import …

    模块提供了类似名字空间的限制,允许 Python 从模块中导入指定的符号(变量、函数、类等)到当前模块。导入后,这些符号就可以直接使用,而不需要前缀模块名。

    语法如下:

    from modname import name1[, name2[, ... nameN]]

    例如,要导入模块 hello 的 sayhello 函数,使用如下语句:

    ## 直接导入方法
    from hello import sayhello
    sayhello()

    from … import * 语句

    把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

    from modname import *

    这提供了一个简单的方法来导入一个模块中的所有项目。

    我们在 hello.py 中再添加一个 world 方法。

    def world():
       print("Python World!")

    在 do.py 文件中引入全部方法进行调用。

    ## 导入所有方法
    from hello import *
    sayhello()
    world()

    执行后输出:

    Hello World!
    Python World!

    证明 hello 模块中的两个方法都可以直接调用,实际项目中不推荐被过多地使用。

    包(package)是 Python 中对模块的更高一级的抽象。简单来说,Python 允许用户把目录当成模块看待。这样一来,目录中的不同模块文件,就变成了「包」里面的子模块。此外,包目录下还可以有子目录,这些子目录也可以是 Python 包。这种分层,对模块识别、管理,都是非常有好处的。

    特别地,对于一些大型 Python 工具包,内里可能有成百上千个不同功能的模块。科学计算领域,SciPy, NumPy, Matplotlib 等第三方工具,都是用包的形式发布的。

    包 定义

    常见的包结构如下:

    pakageName
    -------__init__.py
    -------moduleName1.py
    -------moduleName2.py
    ------- ...

    包路径下必须存在 __init__.py 文件。

    示例:

    我们创建一个 cal 的包,包中有一个计算器的 model ,结构如下:

    cal
    -------__init__.py
    -------calculator.py

    calculator.py 模块的代码如下:

    def add(a,b) :
       return a+b
    
    def reduce(a,b) :
       return a-b
    
    def multiply(a,b) :
       return a*b
    
    def divide(a,b) :
       return a/b

    使用 Python 包

    Python 包的使用和模块的使用类似,下面是导入的语法:

    import 包名.包名.模块名

    比如我们在 do.py 中导入 calculator.py

    # 导入包
    import cal.calculator
    # 使用包的模块的方法
    print(cal.calculator.add(1,2))

    但是导入调用的时候报名比较长,这样就可以使用from ... import ...语句来简化一下。

    # 导入包
    from cal import calculator
    # 使用包的模块的方法
    print(calculator.multiply(3,6))

    当包名越来越长的时候效果也会越好。

  • 相关阅读:
    Maven中配置生成单元测试报告配置
    maven-surefire-plugin总结
    Java程序内存分析:使用mat工具分析内存占用
    利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
    JVM性能监控工具(一)-jdk命令行工具
    Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈
    JDK自带内存及线程分析工具
    使用jstack和TDA进行java线程dump分析
    qt 插件开发
    精通linux设备驱动开发 笔记
  • 原文地址:https://www.cnblogs.com/doagain/p/15521675.html
Copyright © 2011-2022 走看看