獨家 | 5個只有少數程序員知道的用例
作者:Shalitha Suranga
翻譯:閆曉雨
校對:趙茹萱
編程語言在抵達不同的開發者社區時通常會變得更流行。例如,JavaScript因Electron框架而變得更流行,它允許開發人員使用Web前端構建桌面應用程序。Python也嘗試通過Python開發者社區中的令人印象深刻的創新打入新的開發者社區。 現在我們可以使用Python來構建類似JavaScript的任何東西。然而,大多數開發人員仍然沒有意識到這些優秀的基于Python的創新。在這個故事中,我將講解幾個鮮為人知的Python用例。嘗試將Python應用于以下用例,并幫助Python更受歡迎吧。 用Python創建移動應用程序
如今,Dart和JavaScript語言是最受青睞于構建跨平臺的移動應用程序。換句話說,Flutter和React Native主導著移動應用開發市場。但是,是否所有Python程序員都必須學習Dart或JavaScript才能編寫移動應用程序?不——Kivy GUI框架(https://github.com/kivy/kivy)已經可以為Android和iOS平臺生成原生應用程序。
因此,您可以使用Python構建跨平臺的移動應用程序。
Kivy自帶類似于Flutter的小部件工具包。Kivy使用SDL(Simple DirectMedia Layer)(https://github.com/libsdl-org/SDL)在Android和iOS上渲染2D元素,就像Flutter使用Google Skia(https://github.com/google/skia)一樣。Kivy通過Android上的JNI/Cython和iOS上的Objective-C/Cython與原生移動API進行通信。 與其他移動框架一樣,Kivy也提供工具鏈來制作特定于平臺的應用程序包。此外,您可以在桌面操作系統上運行Kivy應用程序。Google Play和Apple App Store接受基于Kivy的應用程序(https://github.com/kivy/kivy/wiki/List-of-Kivy-Projects)。如果許多開發者開始使用Kivy構建他們的應用程序,它無疑可與Flutter和React Native爭鋒。 在瀏覽器上運行Python
Python解釋器通常在操作系統上運行。如何在Web瀏覽器上運行Python?通常認為,必須在遠程服務器上托管Python解釋器實例并通過WebSocket協議進行通信。是的——這就是大多數在線Python解釋器所做的。但現在,您可以在瀏覽器上用Pyodide(https://github.com/pyodide/pyodide)單純從客戶端運行任何Python模塊。Pyodide通過Emscripten運行CPython的WebAssembly版本。瀏覽器的WebAssembly實現通常提供類似CPU的虛擬執行環境。 Emscripten WebAssembly編譯器也支持虛擬內存文件系統。因此,我們也可以在瀏覽器上運行Python文件系統API模塊。請參閱以下代碼片段——它將在瀏覽器上運行。
console.log(pyodide.runPython(` import os os.makedirs('dir/test') print(os.listdir('dir')) `));
上面的代碼將啟用Emscripten中的虛擬文件系統實現并打印以下輸出。
['test']
現在,您可以直接在Web瀏覽器上運行Python科學計算代碼。Pyodide支持流行的科學計算編程庫,例如NumPy、pandas、SciPy、Matplotlib和scikit-learn。Pydiode還提供了一種訪問Web API的方法。例如,您可以使用以下Python代碼顯示瀏覽器警報。
import js js.alert('Hello JavaScript!') # js module refers to window :)
現在,一個Python開發者用Python寫React應用,也不過是稀松平常的一件事。 用Python編寫Shell腳本
系統管理員通常會為各種系統維護任務編寫Bash腳本。開發人員還傾向于使用Shell腳本自動化他們重復且耗時的手動任務——以提高他們的生產力。一些程序員還使用Python編寫Shell腳本,因為Bash沒有提供我們需要的現代腳本語言的所有語言特性。
但是,您不得不在Python相比于在Bash中寫更多的代碼才能處理進程。ShellPy(https://github.com/lamerman/shellpy)項目為這個問題提供了一個優秀的解決方案。ShellPy允許您使用Python編寫類似Bash的自動化腳本。看下面的例子吧。
#!/usr/bin/env shellpyprint('Hello ShellPy')`echo "Hello" > test.txt cat test.txt `正如您已經注意到的,您可以在同一個ShellPy腳本文件中運行Bash命令和Python片段。您可以使用Python處理數據,并且依然使用Bash來生成進程。很棒的是,您可以直接將Bash命令輸出到一個Python變量。嘗試使用ShellPy用干凈簡單的Python代碼編寫您的下一個自動化腳本吧。 構建Pythonic混合桌面應用程序
原生桌面應用程序開發在技術上很棒,但我們必須為每個平臺維護單獨的代碼庫。因此,現在開發人員傾向于使用跨平臺的應用程序框架和GUI工具包來構建桌面應用程序。像Electron這樣的框架提供了一種使用Web前端創建跨平臺桌面應用程序的方法。
這些應用程序被稱為混合應用程序,因為我們將本機功能嵌入到Web應用程序中。
基于Electron的應用程序通常在后端使用Node.js代碼。但是,Python程序員可以通過以下兩個項目為Electron應用程序后端編寫Python代碼:python-gui-electron(https://github.com/keybraker/python-gui-electron)和electron-python-example(https://github.com/fyears/electron-python-example)。
我們都知道,Electron由于嵌入式Chromium和Node.js的開銷而經常產生膨脹軟件。作為替代方案,您可以使用Eel(https://github.com/ChrisKnott/Eel)框架編寫基于Python的混合應用程序,并將它們作為Chrome/Chromium應用運行。Eel使用WebSocket連接在Python和Chrome之間創建了一個通信通道——允許您為應用程序后端編寫Python代碼。
此外,您可以使用Python后端使用Neutralinojs構建輕量級和可移植的混合桌面應用程序。 用Python以創紀錄的速度構建CLI程序
當我們為框架和庫制作開發工具時,必須構建CLI應用程序。例如,Flutter團隊創建了Flutter CLI來管理和配置Flutter應用程序。我還為我維護的框架創建了一個基于Node的CLI程序(https://github.com/neutralinojs/neutralinojs-cli)。此外,我們可以將我們的自動化腳本轉換為CLI程序以增強可用性。例如,您可以在向腳本發送特定命令時觸發特定操作或進程。
大多數程序員使用Node.js來構建帶有流行的Node模塊的CLI程序,例如command.js、ink、oclif和chalk。像commander.js這樣的庫提供了高效的可鏈接方法API來更快地構建CLI程序。 Google Open Source的PythonFire(https://github.com/google/python-fire)項目為您提供了一種使用Python開發CLI程序的更高效的方法。PythonFire根據函數定義和參數自動生成CLI結構。此外,您可以使用此庫在創紀錄的時間內將現有的自動化腳本轉換為CLI程序。編寫以下代碼后:
import fire您可以使用以下命令調用這兩個函數。
def add(a, b): return a + b
def sub(a, b): return a – b
if __name__ == '__main__': fire.Fire()
./cli.py add 10 5 ./cli.py sub 5 2
結論
現在,每種編程語言都專注于變得WORA(一次編寫,隨處運行)。JavaScript覆蓋了每個開發者社區,成為排名第一的WORA語言。我在下面的故事中進一步講解了:
抱歉Java,Write Once Run Anywhere (WORA)現在是JavaScriptJava以該口號啟程:一次編寫,隨處運行。但現在,是JavaScript——不是你,Java。
Python是編程世界中下一個最大的游戲規則改變者。它是一種簡單的通用語言,更適合處理數據。現在,Python慢慢進入移動應用和混合應用開發。我們還無法預測哪個會在WORA的角逐中表現更好。2022年,讓我們拭目以待!
感謝閱讀。
原文標題:
5 Python Use Cases That Only a Few Programmers Know
原文鏈接:
https://levelup.gitconnected.com/5-python-use-cases-that-only-a-few-programmers-know-35e25ddf13d4
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。