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行代碼做了一個語音壁紙切換器天天看小姐姐!|
年度爆款文案
1).臥槽!Pdf轉Word用Python輕松搞定!
2).學Python真香!我用100行代碼做了個網站,幫人PS旅行圖片,賺個雞腿吃
3).首播過億,火爆全網,我分析了《乘風破浪的姐姐》,發現了這些秘密
4).80行代碼!用Python做一個哆來A夢分身
5).你必須掌握的20個python代碼,短小精悍,用處無窮
6).30個Python奇淫技巧集
7).我總結的80頁《菜鳥學Python精選干貨.pdf》,都是干貨
8).再見Python!我要學Go了!2500字深度分析
9).發現一個舔狗福利!這個Python爬蟲神器太爽了,自動下載妹子圖片
點閱讀原文,領AI全套資料!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303886.html
標籤:python
上一篇:OpenCV-Python實戰(9)——OpenCV用于影像分割的閾值技術(含大量示例,建議收藏)
下一篇:Python 常用小妙招(一)
