精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

4個Python經典項目實戰,練手必備!

葉楓架構師 ? 來源:葉楓架構師 ? 作者:葉楓架構師 ? 2022-02-23 17:06 ? 次閱讀

Python是一種極具可讀性和通用性的編程語言。Python這個名字的靈感來自于英國喜劇團體Monty Python,它的開發團隊有一個重要的基礎目標,就是使語言使用起來很有趣。Python易于設置,并且是用相對直接的風格來編寫,對錯誤會提供即時反饋,對初學者而言是個很好的選擇。

Python是一種多范式語言,也就是說,它支持多種編程風格,包括腳本和面向對象,這使得它適用于通用目的。隨著越來越多地在工業中,被諸如聯合太空聯盟(NASA的主要飛機支持承包商)和工業光魔(VFX 和盧卡斯影業的動畫工作室)等組織使用,Python 為那些尋求額外編程語言的人提供了巨大的潛力 。

![image](https://upload-images.jianshu.io/upload_images/15344105-5ac55e805898abf1?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
當一個重要的被稱為comp.lang.python的Python新聞組在1994年形成時,Python 的用戶基礎不斷增長,這為Python成為開源開發中最受歡迎的編程語言之一鋪平了道路。

Python當下真的很火。Python實戰項目,也一直尤為關注,接下來,和大家介紹下Python練手的實戰項目。

Python項目練習一:即時標記

這是《Python基礎教程》后面的實踐,照著寫寫,一方面是來熟悉Python的代碼方式,另一方面是練習使用Python中的基本的以及非基本的語法,做到熟能生巧。

這個項目一開始比較簡單,不過重構之后就有些復雜了,但是更靈活了。

按照書上所說,重構之后的程序,分為四個模塊:處理程序模塊,過濾器模塊,規則(其實應該是處理規則),語法分析器。

先來說處理程序模塊,這個模塊的作用有兩個,一個是提供那些固定的html標記的輸出(每一個標記都有start和end),另一個是對這個標記輸出的開始和結束提供了一個友好的訪問接口。來看下程序handlers.py:

![image](https://upload-images.jianshu.io/upload_images/15344105-0223181b32790536?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

這個程序堪稱是整個“項目”的基石所在:提供了標簽的輸出,以及字符串的替換。理解起來也比較簡單。

再來看第二個模塊“過濾器”,這個模塊更為簡單,其實就是一個正則表達式的字符串。相關代碼如下:

![image](https://upload-images.jianshu.io/upload_images/15344105-4aa8ddb5175514d9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

這就是三個過濾器了,分別是:強調牌過濾器(用×號標出的),url牌過濾器,email牌過濾器。熟悉正則表達式的同學理解起來是沒有壓力的。

再來看第三個模塊“規則”,這個模塊,拋開那祖父類不說,其他類應該有的兩個方法是condition和action,前者是用來判斷讀進來的字符串是不是符合自家規則,后者是用來執行操作的,所謂的執行操作就是指調用“處理程序模塊”,輸出前標簽、內容、后標簽。 來看下這個模塊的代碼,其實這個里面幾個類的關系,畫到類圖里面看會比較清晰。 rules.py:

![image](https://upload-images.jianshu.io/upload_images/15344105-e8db657f125b7ad9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

補充utils.py:

![image](https://upload-images.jianshu.io/upload_images/15344105-47996443f4cf845b?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

如果你在學習Python的過程中遇見了很多疑問和難題,可以加-q-u-n 227 -435-450里面有軟件視頻資料免費

總結一下:

最后隆重的來看下“語法分析器模塊”,這個模塊的作用其實就是協調讀入的文本和其他模塊的關系。在往重點說就是,提供了兩個存放“規則”和“過濾器”的列表,這么做的好處就是使得整個程序的靈活性得到了極大的提高,使得規則和過濾器變成的熱插拔的方式,當然這個也歸功于前面在寫規則和過濾器時每一種類型的規則(過濾器)都單獨的寫成了一個類,而不是用if..else來區分。 看代碼:

![image](https://upload-images.jianshu.io/upload_images/15344105-bccfefe9df21ab2e?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

這個模塊里面的處理思路是,遍歷客戶端(也就是程序執行的入口)給插進去的所有的規則和過濾器,來處理讀進來的文本。

有一個細節的地方也要說一下,其實是和前面寫的呼應一下,就是在遍歷規則的時候通過調用condition這個東西來判斷是否符合當前規則。

我覺得這個程序很像是命令行模式,有空可以復習一下該模式,以保持記憶網節點的牢固性。

最后說一下我以為的這個程序的用途:

1、用來做代碼高亮分析,如果改寫成js版的話,可以做一個在線代碼編輯器。

2、可以用來學習,供我寫博文用。

還有其他的思路,可以留下您的真知灼見。

補充一個類圖,很簡陋,但是應該能說明之間的關系。另外我還是建議如果看代碼捋不清關系最好自己畫圖,自己畫圖才能熟悉整個結構。

![image](https://upload-images.jianshu.io/upload_images/15344105-1f2b146fa253db0a?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Python項目練習二:畫幅好畫

這是《Python基礎教程》中的第二個項目,關于Python操作PDF,涉及到的知識點:

1、urllib的使用

2、reportlab庫的使用

這個例子著實很簡單,不過我發現在Python里面可以直接在數組[]里面寫for循環,真是越用越方便。

下面是代碼:

![image](https://upload-images.jianshu.io/upload_images/15344105-dcc1b04cacc5dfc2?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Python項目練習三:萬能的XML

這個項目的名稱與其叫做萬能的XML不如叫做自動構建網站,根據一份XML文件,生成對應目錄結構的網站,不過只有html還是太過于簡單了,如果要是可以連帶生成css那就比較強大了。這個有待后續研發,先來研究下怎么html網站結構。 既然是通過XML結構生成網站,那所有的事情都應該由這個XML文件來。先來看下這個XML文件,website.xml:

![image](https://upload-images.jianshu.io/upload_images/15344105-e036165132747246?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

有了這個文件,下面應該來看怎么通過這個文件生成網站。

首先我們要解析這個xml文件,Python解析xml和在Java中一樣,有兩種方式,SAX和DOM,兩種處理方式不同點在于速度和范圍,前者講究的是效率,每次只處理文檔的一小部分,快速而能有效的利用內存,后者是相反的處理方式,先把所有的文檔載入到內存,然后再進行處理,速度比較慢,也比較消耗內存,唯一的好處就是可以操作整個文檔。

在Python中使用sax方式處理xml要先引入xml.sax中的parse函數,還有xml.sax.handler中的ContentHandler,后面的這個類是要和parse函數來配合使用的。使用方式如下: parse('xxx.xml',xxxHandler),這里面的xxxHandler要繼承上面的ContentHandler,不過只要繼承就行,不需要有所作為。 然后這個parse函數在處理xml文件的時候,會調用xxxHandler中的startElement函數和endElement函數來一個xml中的標簽的開始和結束,中間的過程使用一個名為characters的函數來處理標簽內部的所有字符串。

有了上面的這些認識,我們已經知道如何處理xml文件了,然后再來看那個罪惡的源頭website.xml文件,分析其結構,只有兩個節點:page和directory,很明顯page表示一個頁面,directory表示一個目錄。

所以處理這個xml文件的思路就變的清晰了。讀取xml文件的每一個節點,然后判斷是page還是directory如果是page則創建html頁面,然后把節點中的內容寫到文件里。如果遇到directory就創建一個文件夾,然后再處理其內部的page節點(如果存在的話)。

下面來看這部分代碼,書中的實現比較復雜,比較靈活。先來看,然后在分析。

![image](https://upload-images.jianshu.io/upload_images/15344105-3ad15bf93ce91e6e?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

看起來這個程序上面分析的復雜了一些,不過偉人毛毛說過,任何復雜的程序都是紙老虎。那我們再來分析一下這個程序。

首先看到這個程序是有兩個類,其實完全可以當作一個類,因為有了繼承。

然后再來看它多了些什么,除了我們分析出來的startElement和endElement以及characters,多出來了startPage,endPage;startDirectory,endDirectory;defaultStart,defaultEnd;ensureDirectory;writeHeader,writeFooter;和dispatch,這些個函數。除了dispatch,前面的函數都很好理解,每一對函數都是單純的處理對應的html標簽以及xml節點。而dispatch比較復雜,復雜之處在于他是用來動態拼合函數并且進行執行的。

dispatch的處理思路是,首先根據傳遞的參數(就是操作名稱以及節點名稱)判斷是否存在對應的函數如startPage,如果不存在則執行default+操作名稱:如defaultStart。

一個函數一個函數搞清楚之后,就知道整個處理流程是什么樣了。首先創建一個public_html的文件,存放整個網站,然后讀xml的節點,通過startElement和endElement調用dispatch進行處理。然后就是dispatch怎么調用具體的處理函數了。 到此為止,這個項目算是分析完了。

主要掌握的內容一個是python中使用SAX處理XML,另一個就是python中的函數的使用,比如getattr,傳參數時的星號……

python項目練習四:新聞聚合

書中的第四個練習,新聞聚合。現在很少見的一類應用,至少我從來沒有用過,又叫做Usenet。這個程序的主要功能是用來從指定的來源(這里是Usenet新聞組)收集信息,然后講這些信息保存到指定的目的文件中(這里使用了兩種形式:純文本和html文件)。這個程序的用處有些類似于現在的博客訂閱工具或者叫RSS訂閱器。

先上代碼,然后再來逐一分析:

![image](https://upload-images.jianshu.io/upload_images/15344105-ab02782628b69671?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

這個程序,首先從整體上進行分析,重點部分在于NewsAgent,它的作用是存儲新聞來源,存儲目標地址,然后在分別調用來源服務器(NNTPSource以及SimpleWebSource)以及寫新聞的類(PlainDestination和HTMLDestination)。所以從這里也看的出,NNTPSource是專門用來獲取新聞服務器上的信息的,SimpleWebSource是獲取一個url上的數據的。而PlainDestination和HTMLDestination的作用很明顯,前者是用來輸出獲取到的內容到終端的,后者是寫數據到html文件中的。

有了這些分析,然后在來看主程序中的內容,主程序就是來給NewsAgent添加信息源和輸出目的地址的。

這確實是個簡單的程序,不過這個程序可是用到了分層了。

審核編輯:符乾江

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4751

    瀏覽量

    68358
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84460
收藏 人收藏

    評論

    相關推薦

    STM32項目實戰:基于STM32U5的智能大棚溫控系統(LVGL),附項目教程/源碼

    《智能大棚溫控系統_STM32U5》項目完整文檔、項目源碼,點擊下方鏈接免費領取。項目資料領取https://s.c1ns.cn/F5XyUSTM32項目
    的頭像 發表于 11-13 17:08 ?341次閱讀
    STM32<b class='flag-5'>項目</b><b class='flag-5'>實戰</b>:基于STM32U5的智能大棚溫控系統(LVGL),附<b class='flag-5'>項目</b>教程/源碼

    STM32項目實戰:基于STM32U5的火災報警系統(LVGL),附項目教程/源碼

    《火災報警系統_STM32U5》項目完整文檔、項目源碼,點擊下方鏈接免費領取。項目資料領取https://s.c1ns.cn/F5XyUSTM32項目
    的頭像 發表于 11-13 14:18 ?402次閱讀
    STM32<b class='flag-5'>項目</b><b class='flag-5'>實戰</b>:基于STM32U5的火災報警系統(LVGL),附<b class='flag-5'>項目</b>教程/源碼

    STM32項目實戰:基于STM32U5的智能燈光控制系統(LVGL),附項目教程/源碼

    《智能燈光控制系統_STM32U5》項目完整文檔、項目源碼,點擊免費領取。項目資料領?。篽ttps://s.c1ns.cn/F5XyUSTM32項目
    的頭像 發表于 11-07 18:50 ?492次閱讀
    STM32<b class='flag-5'>項目</b><b class='flag-5'>實戰</b>:基于STM32U5的智能燈光控制系統(LVGL),附<b class='flag-5'>項目</b>教程/源碼

    STM32項目實戰:基于STM32F4的智能大棚溫控系統(LVGL),附項目教程/源碼

    今天小編來分享一《智能大棚溫控系統》的項目案例,硬件平臺是STM32F4開發板+資源擴展板+顯示觸摸屏+仿真器,項目的演示界面如下圖所示。智能大棚溫控系統
    的頭像 發表于 10-25 13:54 ?432次閱讀
    STM32<b class='flag-5'>項目</b><b class='flag-5'>實戰</b>:基于STM32F<b class='flag-5'>4</b>的智能大棚溫控系統(LVGL),附<b class='flag-5'>項目</b>教程/源碼

    STM32項目實戰:基于STM32F4的智能燈光控制系統(LVGL),附項目教程/源碼

    《智能燈光控制系統_STM32F4項目完整文檔、項目源碼,私信小雯老師免費領取。STM32項目實戰之“智能燈光控制系統”(基于STM32F
    的頭像 發表于 10-17 16:16 ?601次閱讀
    STM32<b class='flag-5'>項目</b><b class='flag-5'>實戰</b>:基于STM32F<b class='flag-5'>4</b>的智能燈光控制系統(LVGL),附<b class='flag-5'>項目</b>教程/源碼

    入門?畢設?競賽?項目練手?STM32/嵌入式/物聯網學習,有這幾款開發板就夠了!

    針對STM32單片機、嵌入式Linux、物聯網初學者,我們精心梳理了從“入門到項目進階”完整學習路徑,并配有詳細的教程、視頻講解、源代碼以及豐富的實戰案例資料。可廣泛用于高校教學、學生畢設、個人
    的頭像 發表于 10-10 16:31 ?264次閱讀
    入門?畢設?競賽?<b class='flag-5'>項目</b><b class='flag-5'>練手</b>?STM32/嵌入式/物聯網學習,有這幾款開發板就夠了!

    【全新課程資料】正點原子《基于GD32 ARM32單片機項目實戰入門》培訓課程資料上線!

    ,掌握ARM32單片機項目的開發流程; 三、課程特色 1、基礎入門,循序漸進 從開發環境搭建和工程創建開始,逐步深入學習每一外設的原理及應用。通過實戰項目鞏固所學技能,確保全面掌握
    發表于 09-24 18:06

    【全新課程資料】正點原子《ESP32基礎及項目實戰入門》培訓課程資料上線!

    正點原子《ESP32基礎及項目實戰入門》全新課程資料上線啦!正點原子工程師手把手教你學!熟練掌握ESP-IDF開發,突破ESP32入門難題! 一、課程介紹 本課程針對ESP32的入門和基礎外設進行
    發表于 09-24 17:59

    【全新課程資料】正點原子《ESP32物聯網項目實戰》培訓課程資料上線!

    正點原子《ESP32物聯網項目實戰》全新培訓課程上線啦!正點原子工程師手把手教你學!通過多個項目實戰,掌握ESP32物聯網項目的開發! 一、
    發表于 09-24 17:05

    基于迅為RK3588【RKNPU2項目實戰1】:YOLOV5實時目標分類

    【RKNPU2項目實戰1】:YOLOV5實時目標分類 https://www.bilibili.com/video/BV1ZN411D7V8/?spm_id_from=333.999.0.0
    發表于 08-15 10:51

    用pycharm進行python爬蟲的步驟

    提供了許多有用的功能,如代碼自動完成、調試和版本控制等。您可以從JetBrains的官方網站下載PyCharm,并根據您的需求選擇免費社區版或付費專業版。 創建一新的Python項目 打開
    的頭像 發表于 07-11 10:11 ?720次閱讀

    verilog的135經典實例

    verilog的135經典實例
    發表于 02-02 10:17 ?14次下載

    盤點那些硬件+項目學習套件:STM32MP157 Linux開發板及入門常見問題解答

    、資源擴展板等豐富的擴展模塊,可拓展物聯網、人工智能等相關技術學習,還可以拓展豐富的項目實戰,非常貼合企業當下開發需求,是一款嵌入式Linux入門進階必備開發板。 ▋界面及項目演示 ▋
    發表于 02-01 14:25

    鴻蒙原生開發-仿ChatGPT應用實戰

    在配置好環境之后,可以嘗試這編寫一較為簡單的應用程序練練手,這里選擇使用一免費的API接口來嘗試編寫一可進行對話的GPT應用程序。
    的頭像 發表于 01-23 17:40 ?556次閱讀
    鴻蒙原生開發-仿ChatGPT應用<b class='flag-5'>實戰</b>

    pycharm怎么配置python環境變量

    PyCharm 是一種以 Python 為主的集成開發環境 (IDE),它提供了一系列的功能用于開發、調試、測試和部署 Python 程序。在使用 PyCharm 開發 Python 項目
    的頭像 發表于 11-29 14:56 ?2743次閱讀