欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
看了這篇你就會(huì )了所有的python模塊使用

如果你退出 Python 解釋器并重新進(jìn)入,你做的任何定義(變量和方法)都會(huì )丟失。因此,如果你想要編寫(xiě)一些更大的程序,為準備解釋器輸入使用一個(gè)文本編輯器會(huì )更好,并以那個(gè)文件替代作為輸入執行。這就是傳說(shuō)中的 腳本。隨著(zhù)你的程序變得越來(lái)越長(cháng),你可能想要將它分割成幾個(gè)更易于維護的文件。你也可能想在不同的程序中使用順手的函數,而不是把代碼在它們之間中拷來(lái)拷去。

為了滿(mǎn)足這些需要,Python 提供了一個(gè)方法可以從文件中獲取定義,在腳本或者解釋器的一個(gè)交互式實(shí)例中使用。這樣的文件被稱(chēng)為 模塊;模塊中的定義可以 導入 到另一個(gè)模塊或 主模塊 中(在腳本執行時(shí)可以調用的變量集位于最高級,并且處于計算器模式)。

模塊是包括 Python 定義和聲明的文件。文件名就是模塊名加上 .py 后綴。模塊的模塊名(做為一個(gè)字符 串)可以由全局變量 __name__ 得到。例如,你可以用自己慣用的文件編輯器在當前目錄下創(chuàng )建一個(gè)叫 fibo.py 的文件,錄入如下內容:

現在進(jìn)入 Python 解釋器并使用以下命令導入這個(gè)模塊:

這樣做不會(huì )直接把 fibo中的函數導入當前的語(yǔ)義表;它只是引入了模塊名 fibo 。你可以通過(guò)模塊名按如 下方式訪(fǎng)問(wèn)這個(gè)函數:

如果打算頻繁使用一個(gè)函數,你可以將它賦予一個(gè)本地變量:

深入模塊

除了包含函數定義外,模塊也可以包含可執行語(yǔ)句。這些語(yǔ)句一般用來(lái)初始化模塊。他們僅在 第一次 被導入的地方執行一次。

每個(gè)模塊都有自己私有的符號表,被模塊內所有的函數定義作為全局符號表使用。因此,模塊的作者可以在模塊內部使用全局變量,而無(wú)需擔心它與某個(gè)用戶(hù)的全局變量意外沖突。從另一個(gè)方面講,如果你確切的知道自己在做什么,你可以使用引用模塊函數的表示法訪(fǎng)問(wèn)模塊的全局變量,modname.itemname。

模塊可以導入其他的模塊。一個(gè)(好的)習慣是將所有的 import 語(yǔ)句放在模塊的開(kāi)始(或者是腳本),這并非強制。被導入的模塊名會(huì )放入當前模塊的全局符號表中。 小編為大家推薦一個(gè)學(xué)習交流群:308754087,群里有人都快滿(mǎn)了~大家遇到啥問(wèn)題都可以在里面交流!是一個(gè)非常好的學(xué)習交流地方~欲進(jìn)從速歐~各種PDF等你來(lái)下載,全部免費,只為幫助大家快速入門(mén)。

import 語(yǔ)句的一個(gè)變體直接從被導入的模塊中導入命名到本模塊的語(yǔ)義表中。例如

這樣可以導入所有除了以下劃線(xiàn)( _ )

開(kāi)頭的命名。 需要注意的是在實(shí)踐中往往不鼓勵從一個(gè)模塊或包中使用 * 導入所有,因為這樣會(huì )讓代碼變得很難讀。不 過(guò),在交互式會(huì )話(huà)中這樣用很方便省力。

***出于性能考慮,每個(gè)模塊在每個(gè)解釋器會(huì )話(huà)中只導入一遍。因此,如果你修改了你的模塊,需要重啟解釋器;或者,如果你就是想交互式的測試這么一個(gè)模塊,可以用 imp.reload() 重新加載,例如import imp; imp.reload(modulename)。

作為腳本來(lái)執行模塊

當你使用以下方式運行 Python 模塊時(shí),模塊中的代碼便會(huì )被執行

python fibo.py <arguments>

模塊中的代碼會(huì )被執行,就像導入它一樣,不過(guò)此時(shí) __name__ 被設置為 "__main__" 。這相當于,如果你在 模塊后加入如下代碼:

if __name__ == "__main__":

import sys

fib(int(sys.argv[1]))

就可以讓此文件像作為模塊導入時(shí)一樣作為腳本執行。此代碼只有在模塊作為 “main” 文件執行時(shí)才被調用:

$ python fibo.py

501 1 2 3 5 8 13 21 34

如果模塊被導入,不會(huì )執行這段代碼:

>>> import fibo

>>>

這通常用來(lái)為模塊提供一個(gè)便于測試的用戶(hù)接口(將模塊作為腳本執行測試需求)。

模塊的搜索路徑

導入一個(gè)叫 spam 的模塊時(shí),解釋器先在當前目錄中搜索名為 spam.py 的文件。如果沒(méi)有找到的話(huà),接著(zhù) 會(huì )到

sys.path 變量中給出的目錄列表中查找。 sys.path 變量的初始值來(lái)自如下:

  • 輸入腳本的目錄(當前目錄)。

  • 環(huán)境變量 PYTHONPATH 表示的目錄列表中搜索

  • (這和shell 變量 PATH 具有一樣的語(yǔ)法,即一系列目錄名的列表)。

  • Python 默認安裝路徑中搜索。

在支持符號連接的文件系統中,輸入的腳本所在的目錄是符號連接指向的目錄。 換句話(huà)說(shuō)也就是包含符號鏈接的目錄不會(huì )被加到目錄搜索路徑中。

實(shí)際上,解釋器由 sys.path 變量指定的路徑目錄搜索模塊,該變量初始化時(shí)默認包含了輸入腳本(或者當前目錄), PYTHONPATH 和安裝目錄。這樣就允許 Python 程序了解如何修改或替換模塊搜索目錄。需要注意的是由于這些目錄中包含有搜索路徑中運行的腳本,所以這些腳本不應該和標準模塊重名,否則在導入模塊時(shí) Python 會(huì )嘗試把這些腳本當作模塊來(lái)加載。這通常會(huì )引發(fā)錯誤。請參見(jiàn) 標準模塊 以了解更多的信息。

“編譯的” Python 文件

為了加快加載模塊的速度,Python 會(huì )在 __pycache__ 目錄下以 module.version.pyc 名字緩存每個(gè)模塊編譯后的版本,這里的版本編制了編譯后文件的格式。它通常會(huì )包含 Python 的版本號。例如,在 CPython 3.3 版中,spam.py 編譯后的版本將緩存為 __pycache__/spam.cpython‐33.pyc。這種命名約定允許由不同發(fā)布和不同版本的 Python 編譯的模塊同時(shí)存在。

Python 會(huì )檢查源文件與編譯版的修改日期以確定它是否過(guò)期并需要重新編譯。這是完全自動(dòng)化的過(guò)程。同時(shí),編譯后的模塊是跨平臺的,所以同一個(gè)庫可以在不同架構的系統之間共享。

Python 不檢查在兩個(gè)不同環(huán)境中的緩存。首先,它會(huì )永遠重新編譯而且不會(huì )存儲直接從命令行加載的模塊。其次,如果沒(méi)有源模塊它不會(huì )檢查緩存。若要支持沒(méi)有源文件(只有編譯版)的發(fā)布,編譯后的模塊必須在源目錄下,并且必須沒(méi)有源文件的模塊。

部分高級技巧:

  • 為了減少一個(gè)編譯模塊的大小,你可以在 Python 命令行中使用 -O 或者 -OO。-O 參數刪除了斷言語(yǔ)句,-OO 參數刪除了斷言語(yǔ)句和 __doc__ 字符串。

  • 因為某些程序依賴(lài)于這些變量的可用性,你應該只在確定無(wú)誤的場(chǎng)合使用這一選項?!皟?yōu)化的” 模塊有一個(gè) .pyo 后綴而不是 .pyc 后綴。未來(lái)的版本可能會(huì )改變優(yōu)化的效果。

  • 來(lái)自 .pyc 文件或 .pyo 文件中的程序不會(huì )比來(lái)自 .py 文件的運行更快;.pyc 或 .pyo 文件只是在它們加載的時(shí)候更快一些。

  • compileall 模塊可以為指定目錄中的所有模塊創(chuàng )建 .pyc 文件(或者使用 -O 參數創(chuàng )建 .pyo 文件)。

  • 在 PEP 3147 中有很多關(guān)這一部分內容的細節,并且包含了一個(gè)決策流程。

標準模塊

Python 帶有一個(gè)標準模塊庫,并發(fā)布有獨立的文檔,名為 Python 庫參考手冊(此后稱(chēng)其為“庫參考手 冊”)。有一些模塊內置于解釋器之中,這些操作的訪(fǎng)問(wèn)接口不是語(yǔ)言?xún)群说囊徊糠?,但是已?jīng)內置于解釋器了。這既是為了提高效率,也是為了給系統調用等操作系統原生訪(fǎng)問(wèn)提供接口。這類(lèi)模塊集合是一個(gè)依賴(lài)于底層平臺的配置選項。例如,winreg 模塊只提供在 Windows 系統上才有。有一個(gè)具體的模塊值得注意: sys ,這個(gè)模塊內置于所有的 Python 解釋器。變量 sys.ps1 和 sys.ps2 定義了主提示符和輔助提示符字符串

這兩個(gè)變量只在解釋器的交互模式下有意義。

變量 sys.path 是解釋器模塊搜索路徑的字符串列表。它由環(huán)境變量 PYTHONPATH 初始化,如果沒(méi)有設定 PYTHONPATH ,就由內置的默認值初始化。你可以用標準的字符串操作修改它

dir() 函數

內置函數 dir() 用于按模塊名搜索模塊定義,它返回一個(gè)字符串類(lèi)型的存儲列表:

無(wú)參數調用時(shí),dir() 函數返回當前定義的命名:

注意該列表列出了所有類(lèi)型的名稱(chēng):變量,模塊,函數,等等。

dir() 不會(huì )列出內置函數和變量名。如果你想列出這些內容,它們在標準模塊 builtins 中定義:

包通常是使用用“圓點(diǎn)模塊名”的結構化模塊命名空間。例如,名為 A.B的模塊表示了名為 A 的包中名為 B 的子模塊。正如同用模塊來(lái)保存不同的模塊架構可以避免全局變量之間的相互沖突,使用圓點(diǎn)模塊名保 存像 NumPy 或Python Imaging Library 之類(lèi)的不同類(lèi)庫架構可以避免模塊之間的命名沖突。

假設你現在想要設計一個(gè)模塊集(一個(gè)“包”)來(lái)統一處理聲音文件和聲音數據。存在幾種不同的聲音格式(通常由它們的擴展名來(lái)標識,例如:.wav, .aiff,.au ),于是,為了在不同類(lèi)型的文件格式之間轉換,你需要維護一個(gè)不斷增長(cháng)的包集合??赡苣氵€想要對聲音數據做很多不同的操作(例如混音,添加回聲,應用平衡 功能,創(chuàng )建一個(gè)人造效果),所以你要加入一個(gè)無(wú)限流模塊來(lái)執行這些操作。你的包可能會(huì )是這個(gè)樣子(通過(guò)分級的文件體系來(lái)進(jìn)行分組):

當導入這個(gè)包時(shí),Python 通過(guò) sys.path 搜索路徑查找包含這個(gè)包的子目錄。

為了讓 Python 將目錄當做內容包,目錄中必須包含 __init__.py 文件。這是為了避免一個(gè)含有爛俗名字的目錄無(wú)意中隱藏了稍后在模塊搜索路徑中出現的有效模塊,比如 string。最簡(jiǎn)單的情況下,只需要一個(gè)空的__init__.py 文件即可。當然它也可以執行包的初始化代碼,或者定義稍后介紹的 __all__ 變量。

用戶(hù)可以每次只導入包里的特定模塊,例如:

import sound.effects.echo

這樣就導入了 sound.effects.echo 子模塊。它必需通過(guò)完整的名稱(chēng)來(lái)引用:

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

導入包時(shí)有一個(gè)可以選擇的方式:

from sound.effects import echo

這樣就加載了 echo 子模塊,并且使得它在沒(méi)有包前綴的情況下也可以使用,所以它可以如下方式調用:

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

還有另一種變體用于直接導入函數或變量:

from sound.effects.echo import echofilter

這樣就又一次加載了 echo 子模塊,但這樣就可以直接調用它的 echofilter() 函數:

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

需要注意的是使用 from package import item 方式導入包時(shí),這個(gè)子項(item)既可以是包中的一個(gè)子模塊 (或一個(gè)子包),也可以是包中定義的其它命名,像函數、類(lèi)或變量。import 語(yǔ)句首先核對是否包中有這 個(gè)子項,如果沒(méi)有,它假定這是一個(gè)模塊,并嘗試加載它。如果沒(méi)有找到它,會(huì )引發(fā)一個(gè) ImportError 異常。

相反,使用類(lèi)似 import item.subitem.subsubitem 這樣的語(yǔ)法時(shí),這些子項必須是包,最后的子項可以是包或 模塊,但不能是前面子項中定義的類(lèi)、函數或變量。

從 * 導入包

那么當用戶(hù)寫(xiě)下 from sound.effects import *時(shí)會(huì )發(fā)生什么事?理想中,總是希望在文件系統中找出包中所 有的子模塊,然后導入它們。這可能會(huì )花掉很長(cháng)時(shí)間,并且出現期待之外的邊界效應,導出了希望只能顯式導入的包。

對于包的作者來(lái)說(shuō)唯一的解決方案就是給提供一個(gè)明確的包索引。import 語(yǔ)句按如下條件進(jìn)行轉換:執行from package import * 時(shí),如果包中的 __init__.py 代碼定義了一個(gè)名為 __all__ 的列表,就會(huì )按照列表中給出的模塊名進(jìn)行導入。新版本的包發(fā)布時(shí)作者可以任意更新這個(gè)列表。如果包作者不想 import * 的時(shí)候導入他們的包中所有模塊,那么也可能會(huì )決定不支持( import * )。例如, sound/effects/__init__.py 這個(gè)文件可能包括如下代碼:

__all__ = ["echo", "surround", "reverse"]

這意味著(zhù) from sound.effects import * 語(yǔ)句會(huì )從 sound 包中導入以上三個(gè)已命名的子模塊。

如果沒(méi)有定義 __all__ , from sound.effects import * 語(yǔ)句 不會(huì ) 從 sound.effects 包中導入所有的子模塊。無(wú)論包中定義多少命名,只能確定的是導入了 sound.effects 包(可能會(huì )運行 __init__.py 中的初始化代 碼)以及包中定義的所有命名會(huì )隨之導入。這樣就從 __init__.py 中導入了每一個(gè)命名(以及明確導入的子 模塊)。同樣也包括了前述的 import 語(yǔ)句從包中明確導入的子模塊,考慮以下代碼:

import sound.effects.echo

import sound.effects.surround

from sound.effects import *

在這個(gè)例子中,echo 和 surround 模塊導入了當前的命名空間,這是因為執行 from...import 語(yǔ)句時(shí)它們已 經(jīng)定義在 sound.effects 包中了(定義了 __all__ 時(shí)也會(huì )同樣工作)。

盡管某些模塊設計為使用 import * 時(shí)它只導出符合某種規范/模式的命名,仍然不建議在生產(chǎn)代碼中使用 這種寫(xiě)法。

記住,from Package import specific_submodule 沒(méi)有錯誤!事實(shí)上,除非導入的模塊需要使用其它包中的同名 子模塊,否則這是推薦的寫(xiě)法。

包內引用

如果包中使用了子包結構(就像示例中的 sound 包),可以按絕對位置從相鄰的包中引入子模塊。例如,如果 sound.filters.vocoder包需要使用 sound.effects包中的 echo 模塊,它可以

from sound.Effects import echo

你可以用這樣的形式 from module import name 來(lái)寫(xiě)顯式的相對位置導入。那些顯式相對導入用點(diǎn)號標明關(guān)聯(lián) 導入當前和上級包。以 surround 模塊為例,你可以這樣用:

from . import echo

from .. import formats

from ..filters import equalizer

需要注意的是顯式或隱式相對位置導入都基于當前模塊的命名。因為主模塊的名字總是 "__main__" , Python 應用程序的主模塊應該總是用絕對導入。

多重目錄中的包

包支持一個(gè)更為特殊的特性, __path__。 在包的 __init__.py 文件代碼執行之前,該變量初始化一個(gè)目錄名 列表。該變量可以修改,它作用于包中的子包和模塊的搜索功能。

這個(gè)功能可以用于擴展包中的模塊集,不過(guò)它不常用。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Python 模塊 | w3cschool菜鳥(niǎo)教程
Python3 模塊
Python3基礎入門(mén)(模塊)
Python模塊詳解
Python第十章-模塊和包
跟老齊學(xué)Python之自己編寫(xiě)模塊
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久