日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: aⅴ在线免费观看 | 国产精品av在线 | 亚洲区在线 | 亚洲视频 欧美视频 | 雪白的扔子视频大全在线观看 | 久久久国产精品人人片 | 国产一区二区三区免费观看 | 国产不卡一区二区视频 | 中文字幕婷婷 | 中文人妻熟妇乱又伦精品 | 一区二区三区啪啪啪 | 国产在线观看h | 国产喷白浆一区二区三区 | 另类视频在线观看 | 中文欧美日韩 | 爆乳2把你榨干哦ova在线观看 | 欧美精品做受xxx性少妇 | 亚洲激情久久久 | 久久情趣视频 | 爱色成人网 | 日日射视频 | 日韩不卡免费 | 意大利少妇愉情理伦片 | 天天射日日射 | 成人久久网站 | www.av网站| 欧美高清一级 | 先锋资源一区二区 | 日韩欧美激情视频 | 国产精品理论在线观看 | 四川话毛片少妇免费看 | 夫妻露脸自拍[30p] | 亚洲高清成人 | 夜色在线视频 | 噜噜啪啪| 日日摸天天添天天添破 | 久久精品久久精品 | 亚洲色图国产视频 | 99久久久无码国产精品免费麻豆 | 在线观看黄网址 | 亚洲制服丝袜一区 | 欧美大片免费观看 | 亚洲高清视频一区二区 | 91九色高潮 | 一级片在线视频 | 狠狠干天天操 | 亚洲天天视频 | 天天躁日日躁狠狠躁喷水 | 久久精品h| 五月伊人婷婷 | 亚洲成人aaa | 一区二区在线视频免费观看 | 国产盗摄精品 | 成人啪啪18免费游戏链接 | 久久久午夜 | 欧美日韩激情视频 | 午夜少妇久久久久久久久 | 好男人香蕉影院 | 巨乳免费观看 | 九色91popny蝌蚪 | 亚洲va在线∨a天堂va欧美va | 99久久久久无码国产精品 | 国产视频久久久 | 姝姝窝人体www聚色窝 | 欧美成人黄 | 97成人人妻一区二区三区 | 97人人澡人人爽人人模亚洲 | 久久精品视频8 | 国产精品亚洲一区二区无码 | 欧美十大老熟艳星 | 好吊一区二区三区 | 中日韩精品视频在线观看 | 久久久久久久久久久久久久av | 狠狠狠狠狠狠干 | 91蜜桃在线观看 | 天堂av亚洲av国产av电影 | 九九免费在线视频 | 风韵丰满熟妇啪啪区老熟熟女 | 欧洲精品久久久 | 日本丰满大乳奶做爰 | 日本欧美一区二区三区不卡视频 | 综合网色 | 久久影视一区二区 | 超碰人人干人人 | 骚婷婷| 亚洲国产毛片 | 欧美人妻日韩精品 | 欧美精品福利视频 | 日韩欧美中文字幕在线视频 | v片在线观看 | 国产精品乱码一区二区三区 | 国产精品99久久久久久宅男 | 欧美成人精品在线 | 国产日韩第一页 | 久久精品视频偷拍 | 亚洲一级av无码毛片精品 | 久草福利在线观看 | 国产中文字幕在线 | 欧美丰满熟妇xxxx |