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