摘要:認(rèn)識(shí)模塊對(duì)于模塊,在前面的一些舉例中,已經(jīng)涉及到了,比如曾經(jīng)有過(guò)獲取隨機(jī)數(shù)模塊。這張圖列出了很少一部分存在這個(gè)目錄中的模塊文件。的標(biāo)準(zhǔn)庫(kù)是的一個(gè)組成部分,也是為的利器,可以讓編程事半功倍。這就是基本的模塊方法。
認(rèn)識(shí)模塊
對(duì)于模塊,在前面的一些舉例中,已經(jīng)涉及到了,比如曾經(jīng)有過(guò):import random (獲取隨機(jī)數(shù)模塊)。為了能夠?qū)δK有一個(gè)清晰的了解,首先要看看什么模塊,這里選取官方文檔中對(duì)它的定義:
A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended. Within a module, the module’s name (as a string) is available as the value of the global variable name.
都是洋碼子,翻譯一下不?不!還是只說(shuō)要點(diǎn):
模塊就是一個(gè)含有python語(yǔ)句的文件
模塊名就是文件名(不要擴(kuò)展名.py)
那么,那個(gè)import random的文件在哪里呢?
用曾經(jīng)講過(guò)的那個(gè)法寶:help()函數(shù)看看:
>>> help(random)
然后就出現(xiàn):
NAME random - Random variable generators. FILE /usr/local/lib/python2.7/random.py MODULE DOCS http://docs.python.org/library/random DESCRIPTION ...
這里非常明顯的告訴我們,random模塊的文件就是: /usr/local/lib/python2.7/random.py(注意:這個(gè)地址是我的計(jì)算機(jī)中的地址,可能跟看官的不一樣,特別是如果看官用的是windows,肯定跟我這個(gè)不一樣了。)
看官這時(shí)候可能有疑問(wèn)了,import是怎么找到那個(gè)文件的?類(lèi)似文件怎么寫(xiě)?不用著急,這些我都會(huì)一一道來(lái)。
標(biāo)準(zhǔn)庫(kù)看了前面的random這個(gè)例子,看官可能立刻想到一個(gè)問(wèn)題:是不是已經(jīng)有人把很多常用的功能都寫(xiě)成模塊了?然后使用者只需要用類(lèi)似方法調(diào)用即可。的確是,比如上面顯示的,就不是某個(gè)程序員在使用的時(shí)候自己編寫(xiě)的,而是在安裝python的時(shí)候,就被安裝在了計(jì)算機(jī)里面。觀察那個(gè)文件存儲(chǔ)地址,就知道了。
我根據(jù)上面得到的地址,列出/usr/local/lib/python2.7/里面的文件,這些文件就是類(lèi)似random的模塊,由于是python安裝就有的,算是標(biāo)配吧,給它們一個(gè)名字“標(biāo)準(zhǔn)模塊庫(kù)”,簡(jiǎn)稱(chēng)“標(biāo)準(zhǔn)庫(kù)”。
這張圖列出了很少一部分存在這個(gè)目錄中的模塊文件。
Python的標(biāo)準(zhǔn)庫(kù)(standard library)是Python的一個(gè)組成部分,也是Python為的利器,可以讓編程事半功倍。
如果看官有時(shí)間,請(qǐng)經(jīng)常訪問(wèn):https://docs.python.org/2/library/,這里列出了所有標(biāo)準(zhǔn)庫(kù)的使用方法。
有一點(diǎn),請(qǐng)看官特別注意,對(duì)于標(biāo)準(zhǔn)庫(kù)而言,由于內(nèi)容太多,恐怕是記不住的。也不用可以的去記憶,只需要知道有這么一個(gè)東西。如果在編寫(xiě)程序的時(shí)候,一定要想到,對(duì)于某個(gè)東西,是不是會(huì)有標(biāo)準(zhǔn)庫(kù)支持呢?然后就到google或者上面給出的地址上搜索。
舉例:
>>> import sys #導(dǎo)入了標(biāo)準(zhǔn)庫(kù)sys >>> dir(sys) #如果不到網(wǎng)頁(yè)上看,用這種方法可以查看這個(gè)標(biāo)準(zhǔn)庫(kù)提供的各種方法(函數(shù)) ["__displayhook__", "__doc__", "__egginsert", "__excepthook__", "__name__", "__package__", "__plen", "__stderr__", "__stdin__", "__stdout__", "_clear_type_cache", "_current_frames", "_getframe", "_mercurial", "api_version", "argv", "builtin_module_names", "byteorder", "call_tracing", "callstats", "copyright", "displayhook", "dont_write_bytecode", "exc_clear", "exc_info", "exc_type", "excepthook", "exec_prefix", "executable", "exit", "flags", "float_info", "float_repr_style", "getcheckinterval", "getdefaultencoding", "getdlopenflags", "getfilesystemencoding", "getprofile", "getrecursionlimit", "getrefcount", "getsizeof", "gettrace", "hexversion", "last_traceback", "last_type", "last_value", "long_info", "maxint", "maxsize", "maxunicode", "meta_path", "modules", "path", "path_hooks", "path_importer_cache", "platform", "prefix", "ps1", "ps2", "py3kwarning", "setcheckinterval", "setdlopenflags", "setprofile", "setrecursionlimit", "settrace", "stderr", "stdin", "stdout", "subversion", "version", "version_info", "warnoptions"] >>> sys.platform #比如這個(gè) "linux2" >>> sys.version #還有這個(gè) "2.7.6 (default, Nov 13 2013, 19:24:16) [GCC 4.6.3]" >>> help(sys.stdin) #這是查看某個(gè)模塊方法具體內(nèi)容的方式
標(biāo)準(zhǔn)庫(kù),在編程中經(jīng)常用到。這里不贅述。只要看官能夠知道在哪里找、如何找所需要的標(biāo)準(zhǔn)庫(kù)即可。
自己編寫(xiě)模塊看官可能比較喜歡“自己動(dòng)手,豐衣足食”(雖然真的不一定是豐衣足食),在某些必要的時(shí)候,還真得自己動(dòng)手寫(xiě)一些模塊。那么怎么編寫(xiě)模塊呢?
前面已經(jīng)交代,模塊就是.py文件,所以,只要將某些語(yǔ)句寫(xiě)到一個(gè).py文件中,它就是一個(gè)模塊了。沒(méi)有什么太多的秘密。
在某個(gè)目錄下面建立了一個(gè)文件,名稱(chēng)是:mmmm.py,如下圖所示,然后編輯這個(gè)文件內(nèi)容。編輯好后保存。
代碼是文件內(nèi)容:
#!/usr/bin/env python #coding:utf-8 web = "https://qiwsir.github.io" def my_name(name): print name class pythoner: def __init__(self,lang): self.lang = lang def programmer(self): print "python programmer language is: ",self.lang
圖示是文件所在目錄,并且在該目錄下打開(kāi)了python的交互模式(我這是在ubuntu下,看官是別的操作系統(tǒng)的化,注意路徑,如果遇到問(wèn)題,可以暫時(shí)擱置,看下文)。
從圖中可以看出,當(dāng)前目錄中有這個(gè)文件:mmmm.py
在交互模式下,仿照對(duì)標(biāo)準(zhǔn)庫(kù)模塊的操作方式:
>>> import mmmm >>> dir(mmmm) ["__builtins__", "__doc__", "__file__", "__name__", "__package__", "my_name", "pythoner", "web"] >>> mmmm.__doc__ #這個(gè)是空的,正是,因?yàn)槲椅丛鴮?xiě)過(guò)任何文檔說(shuō)明 >>> mmmm.__name__ #名字 "mmmm" >>> mmmm.__file__ #文件 "mmmm.py"
再看后面的:my_name,pythoner,web,都是我在內(nèi)容中自己寫(xiě)的。
>>> mmmm.web "https://qiwsir.github.io"
web是模塊mmmm中的一個(gè)通過(guò)賦值語(yǔ)句建立的變量,在這里,它編程了mmmm的屬性,能夠通過(guò)點(diǎn)號(hào)運(yùn)算訪問(wèn),其實(shí)不僅僅是這類(lèi)型的賦值,其它通過(guò)def,class等,都能做為mmmm模塊的屬性。
>>> mmmm.my_name>>> mmmm.pythoner
當(dāng)然,跟操作標(biāo)準(zhǔn)庫(kù)一樣,一樣能夠使用help()來(lái)看看這些屬性的具體內(nèi)容:
>>> help(mmmm.my_name) Help on function my_name in module mmmm: my_name(name) >>> help(mmmm.pythoner) Help on class pythoner in module mmmm: class pythoner | Methods defined here: | | __init__(self, lang) | | programmer(self)
怎么調(diào)用呢?這樣即可:
>>> mmmm.my_name("qiwsir") qiwsir
當(dāng)調(diào)用模塊中的函數(shù)的時(shí)候,用模塊的名稱(chēng)(import mmmm)+點(diǎn)號(hào)+函數(shù)(注意,函數(shù)后面要有括號(hào),如果有參數(shù),括號(hào)里面跟參數(shù)),即 module_name.funciton(*args)
>>> py = mmmm.pythoner("c++") >>> py.programmer() python programmer language is: c++
上面兩行,則是演示用綁定的方法調(diào)用模塊中的類(lèi)以及類(lèi)的實(shí)例方法。跟以往的相比較,似乎都是在前面多了一個(gè)mmmm.
如果感覺(jué)這個(gè)mmmm比較麻煩,可以用from,具體是這樣的:
>>> from mmmm import * >>> my_name("qiwsir") qiwsir >>> web "https://qiwsir.github.io" >>> py = pythoner("c++") >>> py.programmer() python programmer language is: c++
這次不用總寫(xiě)那么mmmm了。兩種方式,哪個(gè)更好呢?沒(méi)有定論。看官在以后的實(shí)踐中體會(huì),什么時(shí)候用什么方式。
上面用from mmmm import ,其中符號(hào),表示將所有的都import進(jìn)來(lái),用這個(gè)方法,也可以只import一部分,如同:
>>> from mmmm import my_name #如果看官前面運(yùn)行了上述操作,需要關(guān)閉交互模式, #再重啟,才能看到下面過(guò)程 >>> my_name("qiwsir") qiwsir >>> web #沒(méi)有import這個(gè),所以報(bào)錯(cuò)。 Traceback (most recent call last): File "", line 1, in NameError: name "web" is not defined
這就是基本的import模塊方法??垂俚囊蓡?wèn),還要存著。且聽(tīng)下回分解。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/37411.html
摘要:找到模塊文件之后,將其編譯成字節(jié)碼,就是那個(gè)文件里面的關(guān)于字節(jié)碼,下面會(huì)介紹,請(qǐng)繼續(xù)閱讀。當(dāng)然,如果根本就沒(méi)有找到同名的源文件,只有字節(jié)碼文件,那么就只能運(yùn)行這個(gè)了。執(zhí)行就是前面已經(jīng)編譯的模塊字節(jié)碼文件,順理成章要執(zhí)行了。 不管是用import還是用from mmmm import *的方式導(dǎo)入模塊,當(dāng)程序運(yùn)行之后,回頭在看那個(gè)存儲(chǔ)著mmmm.py文件的目錄中(關(guān)于mmmm.py文件可...
摘要:補(bǔ)充一個(gè)資料,供有興趣的朋友閱讀浮點(diǎn)數(shù)算法爭(zhēng)議和限制說(shuō)明以上除法規(guī)則,是針對(duì),在中,將和等同起來(lái)了。比如下面的例子不啰嗦了,實(shí)驗(yàn)一個(gè)注意了,引用了一個(gè)模塊之后,再做除法,就不管什么情況,都是得到浮點(diǎn)數(shù)的結(jié)果了。 除法啰嗦的,不僅是python。 整數(shù)除以整數(shù) 看官請(qǐng)?jiān)趩?dòng)idle之后,練習(xí)下面的運(yùn)算: >>> 2/5 0 >>> 2.0/5 0.4 >>> 2/5.0 0.4 >...
摘要:語(yǔ)句,遍列列表字符串字典集合等迭代器,依次處理迭代器中的每個(gè)元素。與配合使用處理在程序運(yùn)行中出現(xiàn)的異常情況。表示此行為空,不運(yùn)行任何操作。在迭代器函數(shù)內(nèi)使用,用于返回一個(gè)元素。恭請(qǐng)到上瀏覽及時(shí)更新的教程零基礎(chǔ)學(xué) 小孩子剛剛開(kāi)始學(xué)說(shuō)話的時(shí)候,常常是一個(gè)字一個(gè)字地開(kāi)始學(xué),比如學(xué)說(shuō)餃子,對(duì)他/她來(lái)講,似乎有點(diǎn)難度,大人也聰明,于是就簡(jiǎn)化了,用餃餃來(lái)代替,其實(shí)就是讓孩子學(xué)會(huì)一個(gè)字就能表達(dá)。當(dāng)然...
摘要:函數(shù)的基本結(jié)構(gòu)中的函數(shù)基本結(jié)構(gòu)函數(shù)名參數(shù)列表語(yǔ)句幾點(diǎn)說(shuō)明函數(shù)名的命名規(guī)則要符合中的命名要求。在中,將這種依賴(lài)關(guān)系,稱(chēng)之為多態(tài)。不要期待在原處修改的函數(shù)會(huì)返回結(jié)果比如一定要之用括號(hào)調(diào)用函數(shù)不要在導(dǎo)入和重載中使用擴(kuò)展名或路徑。 在本教程的開(kāi)始部分,就已經(jīng)引入了函數(shù)的概念:《永遠(yuǎn)強(qiáng)大的函數(shù)》,之所以那時(shí)候就提到函數(shù),是因?yàn)槲矣X(jué)得函數(shù)之重要,遠(yuǎn)遠(yuǎn)超過(guò)一般。這里,重回函數(shù),一是復(fù)習(xí),二是要在已經(jīng)...
摘要:的非阻塞單線程的特點(diǎn)在這個(gè)模塊中體現(xiàn)。還有一個(gè)模塊引入,是用完成的這兩句就顯示了所謂命令行解析模塊的用途了。表示可以接收來(lái)自的請(qǐng)求了。以上把一個(gè)簡(jiǎn)單的剖析。 As he walked by the sea of Galilee, he saw two brothers, Simon, who is called Peter, and Andrew his brother, cas...
閱讀 2940·2021-09-23 11:44
閱讀 1812·2021-09-13 10:24
閱讀 2814·2021-09-08 09:36
閱讀 1371·2019-08-30 15:54
閱讀 2395·2019-08-30 13:54
閱讀 3454·2019-08-30 10:57
閱讀 2011·2019-08-29 18:43
閱讀 3804·2019-08-29 15:10