日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python基础教程:包的创建及导入

發(fā)布時間:2025/6/17 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础教程:包的创建及导入 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

包是一種通過用“帶點號的模塊名”來構(gòu)造?Python 模塊命名空間的方法。 例如,模塊名 A.B 表示 A 包中名為 B 的子模塊。正如模塊的使用使得不同模塊的作者不必?fù)?dān)心彼此的全局變量名稱一樣,使用加點的模塊名可以使得 NumPy 或 Pillow 等多模塊軟件包的作者不必?fù)?dān)心彼此的模塊名稱一樣。

假設(shè)你想為聲音文件和聲音數(shù)據(jù)的統(tǒng)一處理,設(shè)計一個模塊集合(一個“包”)。由于存在很多不同的聲音文件格式(通常由它們的擴展名來識別,例如:.wav, .aiff, .au),因此為了不同文件格式間的轉(zhuǎn)換,你可能需要創(chuàng)建和維護(hù)一個不斷增長的模塊集合。 你可能還想對聲音數(shù)據(jù)還做很多不同的處理(例如,混聲,添加回聲,使用均衡器功能,創(chuàng)造人工立體聲效果), 因此為了實現(xiàn)這些處理,你將另外寫一個無窮盡的模塊流。這是你的包的可能結(jié)構(gòu)(以分層文件系統(tǒng)的形式表示):

__init__.py Initialize the sound packageformats/ Subpackage for file format conversions__init__.pywavread.pywavwrite.pyaiffread.pyaiffwrite.pyauread.pyauwrite.py...effects/ Subpackage for sound effects__init__.pyecho.pysurround.pyreverse.py...filters/ Subpackage for filters__init__.pyequalizer.pyvocoder.pykaraoke.py...

?

當(dāng)導(dǎo)入這個包時,Python搜索 sys.path 里的目錄,查找包的子目錄。

The?init__.py files are required to make Python treat directories containing the file as packages. This prevents directories with a common name, such as string, unintentionally hiding valid modules that occur later on the module search path. In the simplest case, __init__.py can just be an empty file, but it can also execute initialization code for the package or set the __all?variable, described later.

包的用戶可以從包中導(dǎo)入單個模塊,例如:

這會加載子模塊 sound.effects.echo 。但引用它時必須使用它的全名。

導(dǎo)入子模塊的另一種方法是

這也會加載子模塊 echo ,并使其在沒有包前綴的情況下可用,因此可以按如下方式使用:

另一種形式是直接導(dǎo)入所需的函數(shù)或變量:

同樣,這也會加載子模塊 echo,但這會使其函數(shù) echofilter() 直接可用:

請注意,當(dāng)使用 from package import item 時,item可以是包的子模塊(或子包),也可以是包中定義的其他名稱,如函數(shù),類或變量。 import 語句首先測試是否在包中定義了item;如果沒有,它假定它是一個模塊并嘗試加載它。如果找不到它,則引發(fā) ImportError 異常。

相反,當(dāng)使用 import item.subitem.subsubitem 這樣的語法時,除了最后一項之外的每一項都必須是一個包;最后一項可以是模塊或python包,但不能是前一項中定義的類或函數(shù)或變量。

從包中導(dǎo)入

當(dāng)用戶寫 from sound.effects import * 會發(fā)生什么?理想情況下,人們希望這會以某種方式傳遞給文件系統(tǒng),找到包中存在哪些子模塊,并將它們?nèi)繉?dǎo)入。這可能需要很長時間,導(dǎo)入子模塊可能會產(chǎn)生不必要的副作用,這種副作用只有在顯式導(dǎo)入子模塊時才會發(fā)生。

唯一的解決方案是讓包作者提供一個包的顯式索引。import 語句使用下面的規(guī)范:如果一個包的?init__.py 代碼定義了一個名為 __all?的列表,它會被視為在遇到 from package import?時應(yīng)該導(dǎo)入的模塊名列表。在發(fā)布該包的新版本時,包作者可以決定是否讓此列表保持更新。包作者如果認(rèn)為從他們的包中導(dǎo)入?的操作沒有必要被使用,也可以決定不支持此列表。例如,文件 sound/effects/__init__.py 可以包含以下代碼:

這意味著 from sound.effects import * 將導(dǎo)入 sound 包的三個命名子模塊。

如果沒有定義 __all__,from sound.effects import * 語句 不 會從包 sound.effects 中導(dǎo)入所有子模塊到當(dāng)前命名空間;它只確保導(dǎo)入了包 sound.effects (可能運行任何在 __init__.py 中的初始化代碼),然后導(dǎo)入包中定義的任何名稱。這包括 __init__.py` 定義的任何名稱(以及顯式加載的子模塊)。它還包括由之前的 import 語句顯式加載的包的任何子模塊。思考下面的代碼:

import sound.effects.surround from sound.effects import *

?

在這個例子中, echo 和 surround 模塊是在執(zhí)行 from...import 語句時導(dǎo)入到當(dāng)前命名空間中的,因為它們定義在 sound.effects 包中。(這在定義了?all?時也有效。)

雖然某些模塊被設(shè)計為在使用 import * 時只導(dǎo)出遵循某些模式的名稱,但在生產(chǎn)代碼中它仍然被認(rèn)為是不好的做法。

請記住,使用 from Package import specific_submodule 沒有任何問題!實際上,除非導(dǎo)入模塊需要使用來自不同包的同名子模塊,否則這是推薦的表示法。

子包參考

當(dāng)包被構(gòu)造成子包時(與示例中的 sound 包一樣),你可以使用絕對導(dǎo)入來引用兄弟包的子模塊。例如,如果模塊 sound.filters.vocoder 需要在 sound.effects 包中使用 echo 模塊,它可以使用 from sound.effects import echo 。

你還可以使用import語句的 from module import name 形式編寫相對導(dǎo)入。這些導(dǎo)入使用前導(dǎo)點來指示相對導(dǎo)入中涉及的當(dāng)前包和父包。例如,從 surround 模塊,你可以使用:

from .. import formats from ..filters import equalizer

?

請注意,相對導(dǎo)入是基于當(dāng)前模塊的名稱進(jìn)行導(dǎo)入的。由于主模塊的名稱總是 "__main__" ,因此用作Python應(yīng)用程序主模塊的模塊必須始終使用絕對導(dǎo)入。

多個目錄中的包
包支持另一個特殊屬性,?path?。它被初始化為一個列表,其中包含在執(zhí)行該文件中的代碼之前保存包的文件 __init__.py 的目錄的名稱。這個變量可以修改;這樣做會影響將來對包中包含的模塊和子包的搜索。

雖然通常不需要此功能,但它可用于擴展程序包中的模塊集。

腳注

[1] 實際上,函數(shù)定義也是“被執(zhí)行”的“語句”;模塊級函數(shù)定義的執(zhí)行在模塊的全局符號表中輸入該函數(shù)名。

轉(zhuǎn)載于:https://www.cnblogs.com/yuanrenxue/p/10723272.html

總結(jié)

以上是生活随笔為你收集整理的python基础教程:包的创建及导入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩成人综合网 | 99精品久久久久久 | 四虎影酷 | 亚洲污视频 | 国产精品欧美一区二区 | 国产av一区精品 | 欧美极品少妇xxxxⅹ免费视频 | 野花社区视频在线观看 | 天天综合天天干 | aaa亚洲 | 精品国产乱码久久久人妻 | 香蕉av一区 | 成人在线免费播放 | 91精品国产aⅴ一区二区 | 同性色老头性xxxx老头 | 9.1成人免费看片 | 少妇一区二区三区 | 亚洲一区二区av在线 | 亚洲精品国产无码 | 亚洲精品久久久蜜桃 | 无人在线观看高清视频 单曲 | 久久小草 | 天天色影| 亚洲一卡二卡在线观看 | 亚洲国内在线 | 青青青免费在线 | 自拍偷拍 亚洲 | 欧美专区第二页 | 亚洲色图 校园春色 | 中文字幕一区二区三区乱码不卡 | 伊人免费 | 黄色一级大片在线免费看国产一 | 可以看污的网站 | 华人永久免费视频 | 91爱在线观看 | 91精彩视频 | 秋霞影院午夜伦 | 9i精品福利一区二区三区 | 色小姐在线视频 | 亚洲国产精品毛片av不卡在线 | 国偷自产视频一区二区久 | 久久久久久久中文字幕 | 男人午夜天堂 | 国产女人18毛片水18精 | 黄色av片三级三级三级免费看 | 毛片aaaaa | 婷婷六月在线 | 亚洲欧美变态另类丝袜第一区 | 性高潮免费视频 | 日美一级片 | 亚洲午夜精品久久 | 免费在线观看av网址 | 国内免费毛片 | 伊人色综合久久天天 | 西西4444www大胆无视频 | 香蕉视频免费在线 | 免费涩涩视频 | 日韩精品免费一区二区三区竹菊 | 大吊一区二区三区 | 夜夜小视频 | 亚洲网站在线 | 香蕉视频黄色片 | 欧美成人精品在线视频 | 91精品人妻一区二区 | 精品少妇白浆小泬60P | 亚洲综合网址 | 亚洲午夜久久久久 | 野花视频在线观看免费 | 精品日韩| 天天干夜夜骑 | 黄色一区二区视频 | 亚洲孕交 | 日韩精品在线看 | 婷婷综合社区 | 麻豆视频传媒 | 超碰日韩在线 | 欧美一级艳片视频免费观看 | 又污又黄的视频 | 成人免费公开视频 | 打美女屁股网站 | 国产精品色婷婷99久久精品 | 波多野结衣亚洲一区二区 | 九色首页 | 国产精彩视频在线观看 | 老头老太做爰xxx视频 | chinese xxxx videos andvr | 国产区在线 | 在线观看日本视频 | 91在线网站| 中文字幕免费高清在线 | 狠狠网站 | 在线观看波多野结衣 | 亚洲久草视频 | 自拍偷拍第2页 | 曰女同女同中文字幕 | 四虎影院在线观看免费 | 国产精品视频专区 | 四季av一区二区夜夜嗨 | 亚洲人午夜射精精品日韩 |