zoukankan      html  css  js  c++  java
  • 1.4.3 编写自己的模块和包

      Python程序除了可以直接运行,还可以作为模块导入并使用其中的对象。通过__name__属性可以识别程序的使用方式。每个Python脚本在运行时都有一个__name__属性,如果脚本作为模块被导入,则其__name__属性的值被自动设置为模块名;如果脚本单独运行,则其__name__属性值被自动设置为字符串__main__。例如,假设程序 hellp.py中代码如下:

    1 def main():
    2     if __name__ == '__main__':
    3     
    4         print('This program is run directly.')
    5         
    6     elif __name__ == 'hello':
    7     
    8         print('This program is used as a module.')

      对于大型软件的开发,不可能把所有代码都放到一个文件中,那样会使得代码很难维护。对于复杂的大型系统,可以使用包来管理多个模块。包是Python用来组织命名空间和类的重要方式,可以看作是包含大量Python程序模块的文件夹。在包的每个目录中都包含一个__init__.py文件,该文件可以是一个空文件,用于表示当前文件夹是一个包。__init__py文件的主要用途是甚至__all__变量以及执行初始化包所需的代码,其中__all__变量中定义的对象可以在使用“from ... impor * ”时全部被导入。

      假设有如下结构的包:

      sound/                                                                         #Top-level package

        __init__.py                                                           #Initialize the sound package

        formats/                                                               #Subpackage for file format conversions

          __init__.py

          wavread.py

          aiffread.py

          ...

        effects/                                                                 #Subpackage for sound effects

          __init__.py

          echo.py

          surround.py

          reverse.py

          ...

        filters/                                                                  #Subpackage for filters

          __init__.py

          vocoder.py

          karaoke.py

          ...

      那么,可以在自己的程序中使用下面的代码导入其中一个模块:

        import sound.effects.echo

      然后使用完整名字来访问或调用其中的成员,例如:

        sound.effects.echo.echofilter(input,output,delay=0.7,atten=4)

        如果soundeffects\__init__.py文件中有下面一行的代码:

        __all__=['echo','sourround','reverse']

      那么就可以使用这样的方式来导入:

        from sound.effects import *

      然后使用下面的方式来使用其中的成员:

        echo.echofilter(input,output,delay=0.7,atten=4)

          

  • 相关阅读:
    jmeter如何操作数据库
    jmeter压力测试
    cmd中用ping命令时,提示ping命令不是外部或内部命令问题
    scrapy post Request payload类型值
    scrapy-deltafetch实现增量爬取
    django虚拟环境搭建笔记
    python Image模块基本语法
    登录北京住房公积金,使用已注册过账号
    登录北京社保网站
    python通过pop3方式登录邮箱(qq,新浪,网易)
  • 原文地址:https://www.cnblogs.com/avention/p/8516252.html
Copyright © 2011-2022 走看看