導航:首頁 > 編程語言 > python棧應用

python棧應用

發布時間:2024-03-26 00:22:03

python 如何開發高效漂亮的輕量級 Web 應用

痛點

從我開始折騰數據分析工具的那一天,就沒有想明白一件事兒 —— 我打算把數據分析的成果做成一個 Web 應用,為什麼這么難?

我需要的核心功能,無非是在網頁上接收用戶輸入,然後做分析處理,把分析結果反饋給用戶,完事兒。

可是這談何容易?

很多人都會微笑著告訴你,想做 Web 應用?這得學前端編程, HTML + Javascript 了解一下吧!

什麼?你還需要在後台做數據分析?那你就得學 Web 框架了。

你說喜歡 Python ?那就學個 Django 或者 Flask 好了。

我也不是沒有看過 Django 和 Flask 的教程,還曾經付費學習過。光是 Django 配置環境,就夠寫一章出來。

作為學習的中間成果,我還寫了這篇《如何用 Python 做 Web 開發?——Django 環境配置》分享給你。

真正讓我痛苦的,不是 Web 框架的操作有多麼瑣碎,而是教程里的案例,為什麼都那麼奇怪?

幾乎所有的教程,都指向一個目標:

來,我教你做一個 blog 出來!

我用你教?!

我要是想用 blog ,可以直接注冊一個免費的啊!為什麼我要自己開發個 blog 出來?

為什麼你就不能告訴我,該怎麼把我目前的數據分析結果,迅速挪到 Web 頁面上,跟用戶實時交互?

雖然二者的結果,都是做一個 Web 應用出來。但是,它們關注的焦點,需要的功能,能一樣嗎?

但是人家寫書和做教程的人,就是不疾不徐,堅持一定要教會你,如何做一個 blog 出來……

你不學,又能怎麼辦呢?你難道想只憑 Python 腳本,就做一個 Web 應用出來?

還真別說,最近,這個事兒從幻想,變成了現實

樣例

這不,我就用純 Python 腳本寫了個 Web 應用。

我編寫的代碼里,沒有一絲半毫的 Web 框架,Javascript,甚至是 HTML 。

這玩意兒能用嗎?

你自己來試試看。

請你打開瀏覽器,輸入以下鏈接:https://helloworld-streamlit.herokuapp.com/

你會看到下面的初始化界面。

初始化完畢之後,頁面會分成左右兩欄。左面是兩個下拉候選框,分別讓你指定需要分析的數據范圍。

上面一個,是事件類型;

下面一個,是事件發生歸屬地。

如果你看過我的文章《如何用 Python 和循環神經網路預測嚴重交通擁堵?》,應該對這個數據集很熟悉。

只不過,當時我們更注重的,是用循環神經網路搭建了一個嚴重擁堵事件預測模型。

而今天,我們是要進行探索性數據分析,也就是根據我們感興趣的目標,對數據進行整理操作,然後可視化顯示。

選定之後,你會看到右側提示兩個信息:

怎麼樣?

麻雀雖小,五臟俱全。

雖然咱們這個 Web 應用很簡單,不過交互分析該有的功能和流程,基本上都涵蓋了。

你可能會問:

王老師,編這么一個應用出來,不簡單吧?

讓我帶你到幕後,看看是不是很復雜。


幕後

我把這個應用的全部源代碼,都為你存儲到了 Github 上。請你訪問這個網址獲取:https://github.com/wshuyi/demo-helloworld-streamlit


可以看到,一共包含了 4 個文件。

有意思的是,其中 3 個,包括:

都只是部署到遠程伺服器時,需要用到的配置文件而已。

也就是說,只有最後一個helloworld.py是主角,它包含了實現咱們全部互動式數據分析功能的 Python 腳本文件。

這代碼,少說也得有幾百行吧?

別擔心,打開來看看:

上面這張截圖,就已經包含了實現交互數據分析功能的全部代碼。

神奇吧?


解讀

這么短的代碼,為什麼能有如此強大的功能?

這是因為它背後使用的一個軟體包,叫做streamlit。

它是干什麼用的?

一言以蔽之,給你賦能,讓你能夠不去操心什麼前端後端。只寫 Python ,只關注功能,你就能寫出一個互動式 Web 應用出來。

當然,既然最後是 Web 應用,那麼實際上前後端的功能都是齊備的。

只不過,這些交由 Streamlit 來幫你費心操辦。你根本不用管。


爆發

為什麼會有人做了這么一款神器出來?

原因很簡單,咱們前面提到的痛點,是大夥兒都有的。

咱們這些麻瓜(Muggle),遇到痛點只能忍著。

但是真正的魔法師(優秀程序員),是忍不了的。

在這段來自 PyData LA 2019 的視頻里,Streamlit 的 CEO Adrien Treuille 談及了他在數據智能企業中,長期遭遇的痛點。

最大的痛點,就是數據科學家訓練好機器學習模型後,需要驗證效果,和用戶反饋溝通。

但是,做機器學習的工程師本身,並不掌握這一整套的工具棧。

所以,就得在把全部的數據分析和模型訓練工作完成後,把這東西移交給一個工具製作團隊

人家做完以後,就告訴數據科學團隊說,做好了。但是注意,現在處於需求凍結階段。這個應用你們可以隨便用,只是別亂改。改壞了我們管不了。因為最近兩個月,我們還得給其他若干數據分析團隊做 app 。大概幾個月以後,我們又能回來幫助你們了……

Adrien Treuille 很敏銳地捕捉到了這個長期痛點,於是在 2018 年, 創立了 streamlit 。

目標很簡單,給數據科學團隊提供簡單的工具,讓他們使用已經掌握的 Python 編程技能,就能直接做 Web 應用。

什麼 「等上兩三個月不許改」?!你們自己慢慢兒玩兒去吧,我們想怎麼改,就怎麼改!

至於做出來的東西嘛,可以是這樣的:


資源

看到這里,是不是心動了?也打算學習一下 Streamlit ?

沒問題,我前面給你提供的樣例,就在 github 上,你可以直接查看源碼

如果你希望重現這個小應用,並且一步步學習掌握 Streamlit 的基礎知識和技能,我也已經為你寫好了一份手把手的教程。地址在這里https://sspai.com/post/58474。

它不僅教你如何設置環境,安裝工具,寫作代碼,甚至連如何免費部署到 heroku 平台,讓用戶使用,都毫無保留地教給了你。

那篇文章,我用於參加少數派年度徵文活動,所以就不能全文展示在這里了。

讀完以後,如果你覺得有收獲,歡迎在少數派平台上幫我點個贊。謝謝支持!


思考

嘗試過之後,你應該不難發現,Streamlit 給你帶來了什麼。

如果你學過 Javascript 和 Flask, Django 等 Web 應用開發技術,Streamlit 可以加快你的 Web 應用開發與測試進程。

如果你還沒有學過上述技術, Streamlit 可以給你賦能,讓你一下子有了把數據分析結果變成產品的能力。

給你講點兒更激進的。

有人已經希望能用它替代掉 Flask 用於產品發布了。

還有人說,將來寫技術文檔,也應該充分使用 Streamlit 。

甚至,還把它比作了數據科學界的 iPhone 。

這里,它是借喻 iPhone 開啟智能手機時代,說明 Streamlit 的劃時代性

不希望你也變得如此激進。

因為這里提到的每一種功用,現在還都有非常專業的工具做的更好,而且新的工具也在不斷涌現。

例如說,我們在多個教程中一直使用 Jupyter Notebook 。

現在憑借 Voila 擴展的加持,你也可以很輕松地把 Jupyter Notebook 變成 Web app ,而且可以免費運行在 mybinder 上面。

但是,你可以看到,一個新的工具,以一種簡單,而不是更繁復的辦法,解決一個功能痛點,是一件多麼令人欣喜的事兒。

看了這篇文章,可能會給你一種誤解,似乎 JavaScript 為代表的前端編程技術,再也不需要學了。

其實不是這樣的。

可以想像,開發門檻降低以後,將來會有更多的人使用 Python 來做 Web 應用。

用 Streamlit 這樣的方法,他們只是開發出了一個原型。

要是想打造精品,就必須精細調控很多細節。

這時候, 如果你精通 Javascript ,那你潛在的合作對象一下子就多了起來,你掌握的這門技術,也就有了更大的價值。

還記得嗎?我不止一次給你強調過,比起一個工具自身的能力來,協作網路更重要。忘了的話,記得復習《學 Python ,能提升你的競爭力嗎?》。

這就好像印刷術的發明,不是讓會寫字這件事兒變得失去價值,而是全社會都增大了對好作品的渴求。深刻的思考,加上有效的文字表達,會讓你生存得更好。

當然,如果你不希望精通寫作技藝,只是想做一個抄書匠糊口。那麼印刷術就可能會替代你的工作,結果就不那麼美妙了。


小結

這篇文章,我為你介紹了 Streamlit 這款有趣的工具。希望你讀過之後,掌握了以下知識點:

更多Python知識,請關註:Python自學網!!

Ⅱ python堆和棧的區別有哪些

堆(Heap)與棧(Stack)是開發人員必須面對的兩個概念,在理解這兩個概念時,需要放到具體的場景下,因為不同場景下,堆與棧代表不同的含義。一般情況下,有兩層含義:
(1)程序內存布局場景下,堆與棧表示的是兩種內存管理方式;
(2)數據結構場景下,堆與棧表示兩種常用的數據結構。
相關推薦:《Python教程》
堆與棧實際上是操作系統對進程佔用的內存空間的兩種管理方式,主要有如下幾種區別:
(1)管理方式不同。棧由操作系統自動分配釋放,無需我們手動控制;堆的申請和釋放工作由程序員控制,容易產生內存泄漏;
(2)空間大小不同。每個進程擁有的棧的大小要遠遠小於堆的大小。理論上,程序員可申請的堆大小為虛擬內存的大小,進程棧的大小 64bits 的 Windows 默認 1MB,64bits 的 Linux 默認 10MB;
(3)生長方向不同。堆的生長方向向上,內存地址由低到高;棧的生長方向向下,內存地址由高到低。
(4)分配方式不同。堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是由操作系統完成的,比如局部變數的分配。動態分配由alloca函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由操作系統進行釋放,無需我們手工實現。
(5)分配效率不同。棧由操作系統自動分配,會在硬體層級對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高。堆則是由C/C++提供的庫函數或運算符來完成申請與管理,實現機制較為復雜,頻繁的內存申請容易產生內存碎片。顯然,堆的效率比棧要低得多。
(6)存放內容不同。棧存放的內容,函數返回地址、相關參數、局部變數和寄存器內容等。當主函數調用另外一個函數的時候,要對當前函數執行斷點進行保存,需要使用棧來實現,首先入棧的是主函數下一條語句的地址,即擴展指針寄存器的內容(EIP),然後是當前棧幀的底部地址,即擴展基址指針寄存器內容(EBP),再然後是被調函數的實參等,一般情況下是按照從右向左的順序入棧,之後是被調函數的局部變數,注意靜態變數是存放在數據段或者BSS段,是不入棧的。出棧的順序正好相反,最終棧頂指向主函數下一條語句的地址,主程序又從該地址開始執行。堆,一般情況堆頂使用一個位元組的空間來存放堆的大小,而堆中具體存放內容是由程序員來填充的。
從以上可以看到,堆和棧相比,由於大量malloc()/free()或new/delete的使用,容易造成大量的內存碎片,並且可能引發用戶態和核心態的切換,效率較低。棧相比於堆,在程序中應用較為廣泛,最常見的是函數的調用過程由棧來實現,函數返回地址、EBP、實參和局部變數都採用棧的方式存放。雖然棧有眾多的好處,但是由於和堆相比不是那麼靈活,有時候分配大量的內存空間,主要還是用堆。
無論是堆還是棧,在內存使用時都要防止非法越界,越界導致的非法內存訪問可能會摧毀程序的堆、棧數據,輕則導致程序運行處於不確定狀態,獲取不到預期結果,重則導致程序異常崩潰,這些都是我們編程時與內存打交道時應該注意的問題。

Ⅲ 學習Python應該掌握哪些知識點

階段一:Python開發基礎

Python全棧開發與人工智慧之Python開發基礎知識學習內容包括:Python基礎語法、數據類型、字元編碼、文件操作、函數、裝飾器、迭代器、內置方法、常用模塊等。

階段二:Python高級編程和資料庫開發

Python全棧開發與人工智慧之Python高級編程和資料庫開發知識學習內容包括:面向對象開發、Socket網路編程、線程、進程、隊列、IO多路模型、Mysql資料庫開發等。

階段三:前端開發

Python全棧開發與人工智慧之前端開發知識學習內容包括:Html、CSS、JavaScript開發、Jquery&bootstrap開發、前端框架VUE開發等。

階段四:WEB框架開發

Python全棧開發與人工智慧之WEB框架開發學習內容包括:Django框架基礎、Django框架進階、BBS+Blog實戰項目開發、緩存和隊列中間件、Flask框架學習、Tornado框架學習、Restful API等。

階段五:爬蟲開發

Python全棧開發與人工智慧之爬蟲開發學習內容包括:爬蟲開發實戰。

階段六:全棧項目實戰

Python全棧開發與人工智慧之全棧項目實戰學習內容包括:企業應用工具學習、CRM客戶關系管理系統開發、路飛學城在線教育平台開發等。

階段七:演算法&設計模式

階段八:數據分析

Python全棧開發與人工智慧之數據分析學習內容包括:金融量化分析。

階段九:機器學習、圖像識別、NLP自然語言處理

Python全棧開發與人工智慧之人工智慧學習內容包括:機器學習、圖形識別、人工智慧玩具開發等。

階段十:Linux系統&百萬級並發架構解決方案

階段十一:高並發語言GO開發

Python全棧開發與人工智慧之高並發語言GO開發學習內容包括:GO語言基礎、數據類型與文件IO操作、函數和面向對象、並發編程等。

閱讀全文

與python棧應用相關的資料

熱點內容
電腦上如何上小米雲伺服器地址 瀏覽:917
手機資料解壓密碼 瀏覽:442
44引腳貼片單片機有哪些 瀏覽:690
阿里程序員腦圖 瀏覽:189
廣東編程貓學習班 瀏覽:708
上海數控編程培訓學校 瀏覽:313
怎麼下載我的解壓神器 瀏覽:634
lib文件無用代碼會編譯嗎 瀏覽:28
我的世界嗨皮咳嗽伺服器怎麼下 瀏覽:1002
mvn命令順序 瀏覽:978
車貸還完多少時間解壓 瀏覽:964
java頁面開發 瀏覽:818
學編程的小發明 瀏覽:25
為什麼說程序員喜歡格子 瀏覽:253
代碼編譯後叫什麼 瀏覽:969
電腦文件夾做了保護怎麼刪除 瀏覽:678
php資料庫連接全局 瀏覽:528
葫蘆島有程序員嗎 瀏覽:986
小胖機器人顯示無命令 瀏覽:775
一日一畫pdf 瀏覽:99