摘要:今天我們來說一個非常實用的例子,小菜接到組長老王的一個任務,安排一個新的活,這個活是這樣的老王小菜啊,你幫我寫一個登入腳本,跑十幾條命令到服務器上,然后存一下日志。這個時候,小菜偷偷的瞄了一眼組長老王,常舒一口氣,總于寫完了。
Python學了好幾年,發現功力還是那樣,很多同學經常這樣抱怨!都說Python入門容易,精通難,確實是這樣的,每當我們打開一些牛逼的源碼框架,進去看窺探大牛的源碼,比如Python里面非常著名的Django和Flask里面的源碼,發現跟天書一樣。
今天我們來說一個非常實用的例子,小菜接到組長老王的一個任務,安排一個新的活,這個活是這樣的:
老王:小菜啊,你幫我寫一個ssh登入腳本,跑十幾條命令到服務器上,然后存一下日志。
小王:哇,這活簡單啊,so easy 分分鐘搞定啊!這不就是一個登入服務器的命令嗎~~
小王思考了0.08秒,寫下來猥代碼:
1.開始擼代碼
這個活很簡單,于是非常簡單的想到了用Python里面的paramiko模塊,直接分分鐘搞定。
小菜分分鐘就寫完了代碼,豁然覺得有點不對,這樣交差是不是有點過分,怎么說自己也學了2年Python ,這代碼完全沒有封裝啊。不行不行,有點太"菜"了,不行,我要裝高手一點,于是趕緊寫了第二版。
2.封裝成類
上面的代碼太簡單的了,簡直就是原型機器,于是小菜用類去封裝了一下,改進了一下。
設計了一個SSHClinet類,把一些用戶名/密碼/主機地址/端口都封裝到類的屬性里面,然后設計了connect函數去進行連接,如果出現異常就進行處理。然后所有的日志記錄都存到雙向隊列history里面。
然后我們跑到服務器上執行命令,并把處理的結果stdout結果進行簡單的處理,存儲到history里面。當然把讀取histroy和關閉鏈接close()也做了封裝。
這個時候,小菜偷偷的瞄了一眼組長老王,常舒一口氣,總于寫完了。然后跑一下看看吧。
>
Dump the command history...
{"pwd": "/root"}
{"date": "Mon Sep 20 16:09:19 CST 2021"}
Close ssh connection!
跑的沒有問題啊,代碼也很clean啊,異常都考慮了啊,打完收工!
3.啥事帶上下文管理器的類
老王過來檢查小菜干的活,大概看了1分鐘,一臉嚴肅的說:
小菜啊,你知道with的用法吧,為啥家我們在讀寫文件的時候,都喜歡用with語句,因為方便啊。我們讀寫文件用with,然后關閉啥的我們都不用關,有with自動幫我處理。比如下面的情況:
with open("菜鳥學Python.txt","w" ,encoding="utf-8") as wf: wf.write("我要好好學Python")
那么我們上面寫的SSHClinet類是否也能像with一樣靈活方便的,你好好想想吧。
這其實就是帶上下文管理器的類,如果構建呢?其實很簡單:
我們只需要再類里面增加2個魔法函數,一個是__enter__,一個是__exit__即可,就可以迅速把普通的類山雞變鳳凰。注意enter里面一定要返回類的對象self,否則無法調用run方法。
運行一下看看:
是不是非常干凈,清爽,我們把主要的邏輯封裝到run里面,然后ssh連接服務器和關閉服務器都封到enter和exit里面即可。這樣代碼也更pythonic。
4.進階高手
經過上面的講解,相信大家都明白了,于是小菜若有所思的開始動手修改了原來的代碼。把普通的類變成了帶上下文管理器的類。
整個的代碼80%都跟原來的類似,我們只是增加了__enter和__exit__,其實就是原來的 connect和close 邏輯部分,但是這樣一修改,外邊在使用我們這個庫的時候就會很簡單。
>
Dump the command history...
{"pwd": "/root"}
{"date": "Mon Sep 20 16:42:00 CST 2021"}
Close ssh connection!
是不是爽多了,高手和菜鳥的區別,在于寫完代碼之后會思考代碼如果優化,如果提高它的擴展性,如果提高它的穩定性,如果這個代碼復用,如果這個代碼有更多人調用,我應該如何讓他使用更簡單。
如果你經常寫代碼的時候問這么多如果,相信總有一天你的coding 功力會大增。歡迎大家在留言區指導工作,記得給個三連哈!
推薦閱讀:
入門:?最全的零基礎學Python的問題? |?零基礎學了8個月的Python?|?實戰項目?|學Python就是這條捷徑
量化:?定投基金到底能賺多少錢?? |?我用Python對去年800只基金的數據分析
干貨:爬取豆瓣短評,電影《后來的我們》?|?38年NBA最佳球員分析|? ?從萬眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記燈謎答題王?|用Python做個海量小姐姐素描圖碟中諜這么火,我用機器學習做個迷你推薦系統電影
趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!
AI:?會做詩的機器人給圖片上色?|?預測收入?|?碟中諜這么火,我用機器學習做個迷你推薦系統電影
小工具:?Pdf轉Word,輕松搞定表格和水印!?|?一鍵把html網頁保存為pdf!|??再見PDF提取收費!?|?用90行代碼打造最強PDF轉換器,word、PPT、excel、markdown、html一鍵轉換?|?制作一款釘釘低價機票提示器!?|60行代碼做了一個語音壁紙切換器天天看小姐姐!|
年度爆款文案
6).30個Python奇淫技巧集?
點閱讀原文,領AI全套資料!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121548.html
摘要:譯文鏈接編程派有時候,利用語言簡潔優雅地解決問題的方法,會隨著時間變化。隨著不斷進化,統計列表元素數量的方法也在改變。最后將字典中相應鍵的值設置為新的計數。我們發現這種方法比之前的代碼更加簡潔優雅,所以提交了此次修改。 showImg(https://segmentfault.com/img/remote/1460000010723715); 文中如對專業術語的翻譯有誤,請Pytho...
摘要:但一般情況下,我們使用類作為元類。那么,元類到底有什么用呢要你何用元類的主要目的是為了控制類的創建行為。當然,有很多種做法,這里展示用元類的做法。當你創建類時,解釋器會調用元類來生成它,定義一個繼承自的普通類意味著調用來創建它。 元類 Python 中的元類(metaclass)是一個深度魔法,平時我們可能比較少接觸到元類,本文將通過一些簡單的例子來理解這個魔法。 類也是對象 在 Py...
摘要:然后煎魚加了一個后再調用函數,得到的輸出結果和加修飾器的一樣,換言之等效于因此,我們對于,可以理解是,它通過閉包的方式把新函數的引用賦值給了原來函數的引用。 Python有什么好學的這句話可不是反問句,而是問句哦。 主要是煎魚覺得太多的人覺得Python的語法較為簡單,寫出來的代碼只要符合邏輯,不需要太多的學習即可,即可從一門其他語言跳來用Python寫(當然這樣是好事,誰都希望入門簡...
摘要:之所以能卓爾不群靠地就是一種自成一派且精悍有效的編輯器哲學當然也是,就好像網游千千萬卻唯有一覽眾山小,那靠地不是技巧與外在,而是與眾不同的世界觀。征服其實是一種領悟,我融入了的哲學而已。這也是好東西,它比上一個更貼近的哲學。 就在幾個小時以前,我回答了一個關于推薦開發工具的問題,很多朋友表示喜歡和鼓勵,非常感謝!我也很想多寫一些細節,于是便起意開一個系列來聊聊我多次提到的 Vim。 ...
摘要:使用抽象基類顯示表示接口如果類的作用是定義接口,應該將其明確定義為抽象基類。此外,抽象基類可以作為其他類的唯一基類,混入類則決不能作為唯一的基類,除非這個混入類繼承了另一個更具體的混入這種做法非常少見。 《流暢的Python》筆記本篇是面向對象慣用方法的第五篇,我們將繼續討論繼承,重點說明兩個方面:繼承內置類型時的問題以及多重繼承。概念比較多,較為枯燥。 1. 繼承內置類型 內置類型...
閱讀 1410·2021-11-17 09:33
閱讀 3017·2021-10-13 09:39
閱讀 2685·2021-10-09 10:01
閱讀 2447·2021-09-29 09:35
閱讀 3890·2021-09-26 10:01
閱讀 3518·2019-08-26 18:37
閱讀 3148·2019-08-26 13:46
閱讀 1909·2019-08-26 13:39