對(duì)于Python靈活性說明介紹
允許您重用其他類中的屬性的 Python 魔法是這個(gè)“MyDiskMonitor(DiskMonitor)”語句。您只需在定義新類的名稱時(shí),將先前的類的名稱放在括號(hào)內(nèi)。一旦完成此步驟,您立即可以訪問其他類屬性來做自己希望的事情。但是樂趣不僅于此。通過添加另一個(gè)通過電子郵件來發(fā)送標(biāo)記消息的方法。
也許是將其命名為 disk_alert(self),這樣就可以進(jìn)一步自定義新類。這是面向?qū)ο蟮脑O(shè)計(jì)的美妙之處;它允許有經(jīng)驗(yàn)的開發(fā)人員不斷重用已編寫的代碼,從而節(jié)省大量的時(shí)間。 遺憾的是,面向?qū)ο蟮木幊桃灿衅洳焕囊幻?。所有這些抽象都是以復(fù)雜性為代價(jià)的,如果抽象過度,可能會(huì)徹底地弄巧成拙。
由于 Python 支持多重繼承,抽象可以達(dá)到相當(dāng)有害的復(fù)雜程度。您是否能夠想象只是為了編寫一個(gè)方法也要查看多個(gè)文件的情況?無論相信與否,這種情況的確會(huì)發(fā)生,并且代表了面向?qū)ο缶幊痰牟恍椰F(xiàn)實(shí)。
面向?qū)ο蟮木幊痰奶娲桨甘呛瘮?shù)式編程,并且 Python 提供了用于進(jìn)行函數(shù)式以及面向?qū)ο蠛瓦^程式編程的資源。在最后一個(gè)示例中,我們將研究如何以函數(shù)式的方式編寫現(xiàn)已變得非常無聊的磁盤監(jiān)視代碼。
- from subprocess import Popen, PIPE
- import re
- def disk_space(pattern="2[0-9]%", message="CAPACITY WARNING:"):
- #Generator Pipeline To Search For Critical Items
- ps = Popen("df -h", shell=True,stdout=PIPE, stderr=PIPE)
- outline = (line.split() for line in ps.stdout)
- flag = (" ".join(row) for row in outline if re.search(pattern, row[-2]))
- for line in flag:
- print "%s %s" % (message,line)
- disk_space()
查看這最后一個(gè)示例,它與您從本文中看到的所有其他代碼的區(qū)別都非常大。如果您逐行瀏覽該代碼,可以首先從 “ps”變量中以前未見過的內(nèi)容開始。接下來的兩行代碼使用生成器表達(dá)式來處理文件對(duì)象 ps.stdout。
分析該文件并在其中搜索您正在查找的行。如果您將這些代碼行剪切并粘貼到交互式的 Python Shell 中。如果打印的話,您將看到概要和標(biāo)志都是生成器對(duì)象。生成器對(duì)象附帶有下一個(gè)方法,因而允許您通過“管道”將操作連在一起。
概要行從一行中去除新行字符,并往下將該行傳遞給下一個(gè)生成器表達(dá)式,后者一次一個(gè)地在每行中搜索某個(gè)正則表達(dá)式匹配項(xiàng),然后將輸出傳遞給標(biāo)記。此類緊湊的工作流可以替代面向?qū)ο蟮木幊虡邮剑⑶蚁喈?dāng)有趣。然而,這種樣式也有缺點(diǎn),因?yàn)榇a的簡潔性會(huì)導(dǎo)致難于調(diào)試的錯(cuò)誤。
除非獨(dú)立地執(zhí)行每一行代碼。函數(shù)式編程還很傷腦筋,因?yàn)樗屇ㄟ^將解決方案鏈接在一起來考慮解決問題。無論是從過程式還是從面向?qū)ο髽邮降慕嵌瓤?,這都是相當(dāng)不同的。
本文有點(diǎn)試驗(yàn)性質(zhì),因?yàn)樗鼜?Bash 和 PHP 談到了過程、面向?qū)ο?,并在最后談到了使用相同基本代碼的函數(shù)式 Python。但愿本文說明了 Python 是一種非常靈活和功能強(qiáng)大的語言。
其他編程語言的開發(fā)人員也可以學(xué)習(xí)欣賞。隨著 Python 的越來越流行,其他開發(fā)人員除了首選語言之外,學(xué)習(xí) Python 也將變得更加重要。 Python 最近的兩個(gè)最大的發(fā)展領(lǐng)域是 Web 開發(fā)和系統(tǒng)管理。就 Web 開發(fā)而言,PHP 開發(fā)人員可能很快就必須做出每周的選擇,即哪個(gè)項(xiàng)目采用 Python 更有意義。
以及哪個(gè)項(xiàng)目采用 PHP 更有意義。對(duì)于系統(tǒng)管理員、Bash 和 Perl 腳本程序員,他們經(jīng)常被要求采用 Python 完成某些項(xiàng)目。部分是因?yàn)檫@是沒有選擇的,部分是因?yàn)樵S多供應(yīng)商正在為他們的產(chǎn)品提供 Python API。在您的工具箱中準(zhǔn)備一點(diǎn) Python 決不會(huì)傷害任何人。
【編輯推薦】