1. 程式人生 > >1.4.3 編寫自己的模塊和包

1.4.3 編寫自己的模塊和包

python腳本 1.4 for 模塊導入 AD pri 模塊名 模塊 包含

  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)

    如果sound\effects\__init__.py文件中有下面一行的代碼:

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

  那麽就可以使用這樣的方式來導入:

    from sound.effects import *

  然後使用下面的方式來使用其中的成員:

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

      

1.4.3 編寫自己的模塊和包