国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python基礎教程:包,對,沒錯,絕對不是雙肩包!

wuyangnju / 3357人閱讀

摘要:比如,模塊名表示包中名為的子模塊。例如,文件可以包含以下代碼定義了之后,就會把,,導入到當前命名空間。這種導入使用前導點來指示相對導入中涉及的當前包和父包。也就是說被執行的主程序里面不能包含相對導入。

包,Package,是一種Python模塊的集合,從文件組織形式上看,包就是一個文件夾,里面放著各種模塊(.py文件),也可以有子文件夾(子包)。包名構建了一個Python模塊的命名空間。比如,模塊名A.B表示A包中名為B的子模塊。這種使用加點的模塊名可以讓你寫的軟件包里面的模塊名稱和其它軟件包里面的模塊名稱一樣,但又不相互沖突。

舉個栗子,我們要設計一個處理圖片的模塊集合(一個包)。我們知道,圖片有多種不同的文件格式,一般它們以不同的擴展名來識別,比如.jpg.png,.gif等等。為了讀寫不同格式的圖片,你需要對每一種格式建立一個對應的模塊進行處理,為了支持更多的圖片格式,你就要增加更多對應的模塊。對于圖片你可能還有更多的處理,比如,改變色彩,裁剪,旋轉等等,為了實現這些功能,你又要寫更多的模塊。這樣下來,你的包的結構以文件系統的形式表示如下:

image            # 頂級包
├── __init__.py  # 初始化image包
├── formats      # 圖片格式的子包
│?? ├── gif_read.py
│?? ├── gif_write.py
│?? ├── __init__.py
│?? ├── jpg_read.py
│?? ├── jpg_write.py
│?? ├── png_read.py
│?? └── png_write.py
└── process      # 圖片處理的子包
    ├── colors.py
    ├── crop.py
    ├── __init__.py
    └── rotate.py

為了讓目錄成為Python的包,目錄中必須含有一個__init__.py文件,它可以是空文件但不能不存在。這樣做的目的是為了仿照具有通用名稱的目錄無意中隱藏了在模塊搜索路徑排在后面的有效模塊。比如,你當前目錄下有個time目錄是放程序資源的,它里面沒有__init__.py文件就是一個普通的目錄。如果Python不要求包目錄下必須含有__init__.py文件,它就會隱藏Python系統的time模塊。

__all__變量

前面說了,包的目錄中必須包含一個__init__.py文件,它可以是空文件,也可以寫包初始化相關的代碼,或者定義__all__變量。

__all__變量是一個列表,它列舉了這個包包含的子模塊的名稱。當from package import *語句執行時,會把這個模塊名稱列表里面的模塊名稱導入。所以說__all__是一個包的顯示索引。如果你覺得從包中導入*的操作沒必要被使用,也可以不定義__all__這個變量。

例如,文件image/process/init.py可以包含以下代碼:

__all__ = ["colors", "crop", "rotate"]

定義了__all__之后,from image.process import *就會把colorscroprotate導入到當前命名空間。

實際寫代碼的實踐中,import *的做法是嚴格被禁止的,它容易造成包中模塊名與當前命名空間的名稱沖突。

更推薦的方法是from package import submodulefrom package import submodule as alias_for_submodule。當然,如果兩個包中有同名的submodule,就不能同時使用from package import submodule,但可以取個別名。

導入Python包或Python子模塊

導入包的方法和導入模塊的方法一樣:

import image

在程序中引用colors子模塊時:

image.process.colors(...)

接下來,看看我們如何導入一個包中某單個模塊:

import image.process.colors

這樣就加載了子模塊image.process.colors,在程序中使用時必須使用它的全名,而不是簡單的colors。

如果想使用colors這個名字,就用這種導入語句:

from image.process import colors
Python子包參考

當包含有子包時(與例子中的image包類似),我們可以使用絕對導入來引用兄弟包的子模塊。比如,如果模塊 image.process.crop 需要使用 image.formats 包中的 jpg_read 模塊時,它可以使用?from image.formats import jpg_read。

我們也可以使用?from module import name的形式相對導入。這種導入使用前導點.來指示相對導入中涉及的當前包父包。比如,在 crop 模塊中,你可以使用:

from . import colors
from .. import formats
from ..formats import jpg_read

請主要,相對導入是基于當前模塊的名字進行導入的。由于主模塊(即被python 執行的那個.py文件)的名稱總是"__main__",因此用作Python應用程序的主模塊的模塊必須用絕對導入。也就是說被執行的主程序里面不能包含相對導入。這一點很重要,切記!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43796.html

相關文章

  • 當公司辭掉85后測試員選擇95后測試員后...

    摘要:反正也考不上了,索性破罐子破摔,大周將自己復習的資料一股腦送給了同戰的研友,自己研究起了簡歷,開始積極迎戰校招。 小H被裁員了。 作為一名85后的單身未婚女測試員...

    LiuZh 評論0 收藏0
  • 沒什么技術含量的Remove Before Flight

    航空業有很多值得我們借鑒和學習的工作方式,將來有時間我會給大家引薦更多實例。 showImg(https://segmentfault.com/img/remote/1460000013512660?w=680&h=454); 仔細觀察每架停泊著的飛機,會發現機身很多地方都掛著細長的紅布條,上面寫著REMOVE BEFORE FLIGHT,中文翻譯成飛行前拆除。這種布條沒什么技術含量,但是非常重要...

    wenzi 評論0 收藏0
  • 重磅 | 完備的 AI 學習路線,最詳細的資源整理!

    摘要:是你學習從入門到專家必備的學習路線和優質學習資源。的數學基礎最主要是高等數學線性代數概率論與數理統計三門課程,這三門課程是本科必修的。其作為機器學習的入門和進階資料非常適合。書籍介紹深度學習通常又被稱為花書,深度學習領域最經典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導讀】本文由知名開源平...

    荊兆峰 評論0 收藏0
  • 記錄我的Python學習筆記

    摘要:本文是通過廖雪峰的網站學習而整理的真的是很好的教程,省得我花錢買書了,然后我沒有去再整理總結語法,而是直接通過寫出代碼段來體現自己的學習,也方便以后的快速復習回顧。 不想再像以前那樣,什么都從頭開始學習語法、總結語法,這樣反而會過分糾結于語法,耽誤了開發,畢竟語言的主要屬性是工具,次要的屬性是語言本身。 所以還是先熟練使用語言去進行開發,等足夠熟悉了,再去研究語言本身(編譯原理……)。...

    lijy91 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<