成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

[Python]模塊、包-創(chuàng)新互聯(lián)

1. 模塊與import語(yǔ)句

任何Python源文件都能以模塊的形式使用,例如:

創(chuàng)新互聯(lián)一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、成都網(wǎng)頁(yè)設(shè)計(jì)、微信小程序開(kāi)發(fā)、成都網(wǎng)站開(kāi)發(fā)、成都網(wǎng)站制作、成都軟件開(kāi)發(fā)、重慶APP開(kāi)發(fā)是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來(lái)見(jiàn)證!
# spam.py
a = 37
def foo():
    print("I'm foo and a is %s" % a)
def bar():
    print("I'm bar and I'm calling foo")
class Spam(object):
    def grok(self):
        print("I'm Spam.grok")

要以模塊的形式加載這段代碼,可以使用import spam語(yǔ)句。首次使用import加載模塊時(shí),它將做3件事:
1) 創(chuàng)建新的命名空間,用作在相應(yīng)源文件中定義的所有對(duì)象的容器。
2) 在新創(chuàng)建的命名空間中執(zhí)行模塊中包含的代碼。
3) 在調(diào)用函數(shù)中創(chuàng)建名稱為引用模塊命名空間,這個(gè)名稱與模塊的名稱相匹配,例如:

import spam
x = spam.a
spam.foo()
s = spam.Spam()
s.grok()

import執(zhí)行已加載源的文件中的所有語(yǔ)句。要導(dǎo)入多個(gè)模塊,可以為import提供逗號(hào)分隔的模塊名稱列表,例如:

import socket, os, re

用于引用模塊的名稱可以使用as限定符進(jìn)行更改,例如:

import spam as sp
import socket as net
sp.foo()
sp.bar()
net.gethostname()

import語(yǔ)句可以出現(xiàn)在程序中的任何位置,但是每個(gè)模塊中的代碼僅加載和執(zhí)行一次。
?

2. 從模塊導(dǎo)入選定符號(hào)

from語(yǔ)句用于將模塊中的具體定義加載到當(dāng)前命名空間中。from語(yǔ)句相當(dāng)于import,但它不會(huì)創(chuàng)建一個(gè)名稱來(lái)引用新創(chuàng)建的模塊命名空間,而是將對(duì)模塊中定義的一個(gè)或多個(gè)對(duì)象的引用放到當(dāng)前命名空間中。例如:

from spam import foo
foo()
spam.foo() # NameError

from語(yǔ)句還會(huì)接受用逗號(hào)分隔的對(duì)象名稱列表,例如:

from spam import(foo, bar, Spam)

另外,as限定符可用于重命名使用from導(dǎo)入的具體對(duì)象,例如:

from spam import Spam as Sp
s = Sp()

"*"星號(hào)通配符也可用于加載模塊中的所有定義,但以下劃線開(kāi)頭的定義除外,例如:

from spam import *

form module import 語(yǔ)句只能在模塊最頂層使用。通過(guò)定義列表__all__,模塊可以精確控制from spam import \導(dǎo)入的名稱集合,例如:

# spam.py
__all__ = ['bar', 'spam']

使用from導(dǎo)入形式導(dǎo)入定義不會(huì)更改定義的作用域規(guī)則。函數(shù)的全局命名空間始終是定義該函數(shù)的模塊,而不是將函數(shù)導(dǎo)入并調(diào)用該函數(shù)的命名空間。
?

3. 模塊搜索路徑

加載模塊時(shí),解釋器在sys.path路徑中搜索字典列表。sys.path中的第一個(gè)條目通常是空字符串,表示當(dāng)前正在使用的字典。sys.path中的其他條目可能包含字典名稱、.zip歸檔文件和.egg文件。各個(gè)條目在sys.path中列出的順序決順決定了加載模塊時(shí)的搜索順序。
可以將一組模塊打包為一個(gè)文件,設(shè)想創(chuàng)建兩個(gè)模塊foo.py和bar.py,并將它們放在一個(gè)名為mymodules.zip的zip文件中,就可以以如下方式添加到搜索路徑:

import sys
sys.path.append("mymodules.zip")
import foo, bar

zip文件可以與常規(guī)路徑名稱組件混合使用,例如:

sys.path.append("/tmp/modules.zip/lib/python")

從zip中導(dǎo)入需要注意一些限制。首先,只能從歸檔文件中導(dǎo)入.py、.pyw、.pyc和.pyo文件。而且,從歸檔文件加載.py文件時(shí),Python不會(huì)建.pyc和.pyo文件,這會(huì)導(dǎo)致加載模塊時(shí)的性能下降。
?

4. 模塊加載和編譯

使用import加載的模塊實(shí)際上可分為4個(gè)通用類別:
1) 使用Python編寫的代碼
2) 已被編譯為共享庫(kù)或DLL的C或C++擴(kuò)展
3) 包含一組模塊的包
4) 使用C編寫并鏈接到Python解釋器的內(nèi)置模塊
查看編塊(以foo為例)時(shí),解釋器在sys.path下的每個(gè)目錄中搜索以下文件(按搜索順序列出):
1) 目錄foo,它定義了一個(gè)包
2) foo.pyd、foo.so、foomodule.so或foomodule.dll(已編譯的擴(kuò)展)
3) foo.pyo(只適用于使用了-O或-OO選項(xiàng)時(shí))
4) foo.pyc
5) foo.py(Windows上還會(huì)查找.pyw文件)
對(duì)于.py文件,首次導(dǎo)入模塊時(shí),它會(huì)被編譯為字節(jié)碼并作為.pyc文件寫回磁盤。在后續(xù)導(dǎo)入中,解釋器將加載這段預(yù)編譯的字節(jié)碼,除非.py文件的修改日期要更新一些。.pyc文件與解釋器的-O選項(xiàng)結(jié)合,文件已刪除了行號(hào)、斷言和其他調(diào)試信息的字節(jié)碼。如果指定-OO選項(xiàng),還會(huì)從文件中刪除文檔字符串。
只有使用import語(yǔ)句才能將文件自動(dòng)編譯為.pyc和.pyo文件。另外,如果包含模塊的.py文件的目錄不允許寫入,將不會(huì)創(chuàng)建這些文件。解釋器的-B選項(xiàng)也可以禁止生成這些文件。
如果存在.pyc和.pyo文件,則可以沒(méi)有相應(yīng)的.py文件。但即使沒(méi)有提供源文件,仍然可以檢查并找到大量細(xì)節(jié)。并且,為某個(gè)Python版本生成的.pyc文件可能不適用于其他的Python版本。
?

5. 包

包可用于將一組模塊分組到一個(gè)常見(jiàn)的包名稱下,這有助于解決不同應(yīng)用程序中使用的模塊名稱之間的命名空間沖突問(wèn)題。包是通過(guò)使用與其相同的名稱創(chuàng)建目錄,并在該目錄中創(chuàng)建文件__init__.py來(lái)創(chuàng)建的??梢詫⑷缦滦问浇M織一個(gè)包:

Graphics/
    __init__.py
    Primitive/
        __init__.py
        lines.py
        fill.py
        text.py
    Graph3d/
        __init__.py
        plot2d.py
    Graph4d/
        __init__.py
        plot3d.py
    png.py
    tiff.py
    jpeg.py

import語(yǔ)句用于通過(guò)多種方式從包中加載模塊:
1) import Graphics.Primitive.fill
2) from Graphics.Primitive import fill
3) from Graphics.Primitive.fill import floodfill
只要第一次導(dǎo)入包中的任何部分,就會(huì)執(zhí)行__init__.py中的代碼。這個(gè)文件可以為空。在import語(yǔ)句執(zhí)行期間,遇到的所有__init__.py文件都會(huì)執(zhí)行。因此,之前示例中的import Graphics.Primitive.fill語(yǔ)句將會(huì)首先執(zhí)行Graphics目錄中的__init__.py文件,然后執(zhí)行Primitive目錄中的__init__.py文件。
處理以下這條語(yǔ)句時(shí)需注意:

from Graphics.Primitive import *

使用該語(yǔ)句希望將與某個(gè)包相關(guān)聯(lián)的所有子模塊導(dǎo)入到當(dāng)前命名空間中,但是該語(yǔ)句只會(huì)導(dǎo)入在Primitive目錄的__init__.py文件中定義的所有名稱。這種行為可以通過(guò)定義列表__all__來(lái)修改,例如:

# Graphics/Primitive/__init__.py
__all__ = ["lines", "text", "fill"]

如果想要導(dǎo)入同一個(gè)包中的其他子模塊時(shí),可以使用相對(duì)導(dǎo)入,例如:

# fill.py
from . import lines

相對(duì)導(dǎo)入也可以加載同一個(gè)包的不同目錄中包含的子模塊,例如:

# plot2d.py
from ..Primitives import lines

相對(duì)導(dǎo)入只能命名用from module import symbol形式的導(dǎo)入語(yǔ)句來(lái)指定。因此import ..Primitives.lines或import .lines這樣的語(yǔ)句在語(yǔ)法上是不對(duì)的。
最后,Python導(dǎo)入一個(gè)包時(shí),它將定義特殊變量__path__,該變量包含一個(gè)目錄列表,查找包的子模塊時(shí)將搜索這個(gè)列表。__path__可通過(guò)__init__.py文件中包含的代碼訪問(wèn),最初包含的一項(xiàng)具有包的目錄包稱。如果有必要,包可以向__path__列表提供更多目錄,更改查找子模塊時(shí)使用的搜索路徑。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章名稱:[Python]模塊、包-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://jinyejixie.com/article6/djcsig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、服務(wù)器托管、搜索引擎優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、電子商務(wù)商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)
合阳县| 公主岭市| 盐城市| 南开区| 新沂市| 荥阳市| 堆龙德庆县| 泰来县| 莲花县| 鄂伦春自治旗| 越西县| 蓬安县| 洛宁县| 吴江市| 峨边| 京山县| 新平| 肇源县| 南宁市| 手机| 阜南县| 云安县| 共和县| 奈曼旗| 张家界市| 手游| 井陉县| 故城县| 柏乡县| 中西区| 长宁区| 延寿县| 汾西县| 陇南市| 昌吉市| 长顺县| 广昌县| 杭锦旗| 尼勒克县| 桦南县| 元谋县|