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