久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Python 的八個(gè)實(shí)用的“無(wú)代碼”特性

注:在命令行中使用 Python 時(shí),“-m”選項(xiàng)參數(shù)可以實(shí)現(xiàn)非常強(qiáng)大的功能。可以說(shuō),善用“-m”參數(shù),這是一個(gè)優(yōu)秀的 Python 技術(shù)人的必備技能。

今天分享的文章介紹了 8 種非常實(shí)用的小功能,希望能給大家?guī)?lái)幫助!

近幾年 Python 語(yǔ)言之所以流行,是因?yàn)槲覀兛梢允褂盟帉?xiě)更少的代碼來(lái)實(shí)現(xiàn)復(fù)雜的功能。Python 開(kāi)發(fā)者非常歡迎那些封裝了復(fù)雜實(shí)現(xiàn)但是對(duì)使用者十分友好的工具包。

然而,Python 的簡(jiǎn)便性不止如此。你能相信我們可以在不寫(xiě)任何代碼的情況下使用 Python 嗎?在接下來(lái)的文章中,我們會(huì)介紹 8 個(gè)無(wú)需編寫(xiě)任何代碼即可使用 Python 內(nèi)置功能的例子。

0. Python CLI “-m”參數(shù)

我們首先從 Python CLI(命令行界面)開(kāi)始談起。雖然我們不必編寫(xiě)代碼來(lái)使用稍后介紹的功能,但是為了讓 Python 知道我們要執(zhí)行的內(nèi)容,我們需要使用 Python 命令行來(lái)進(jìn)行操作。

只要我們的電腦上安裝了 Python 環(huán)境,我們就可以在 Python 命令行界面輸入python --help顯示所有支持的參數(shù)。

圖片

由于命令輸出的內(nèi)容太長(zhǎng),上圖僅顯示了部分內(nèi)容。這里最想強(qiáng)調(diào)的是-m mod參數(shù),它會(huì)將 Python 模塊以腳本的形式運(yùn)行。因此,如果該模塊的實(shí)現(xiàn)支持命令行操作,我們就可以在命令行直接使用它。接下來(lái)就讓我們體驗(yàn)一下:)

1. 服務(wù)端口測(cè)試

有時(shí)候,我們想測(cè)試 ip 端口的出站網(wǎng)絡(luò)流量,通常 telnet 命令是一個(gè)不錯(cuò)的選擇。在 Windows 平臺(tái)上默認(rèn)沒(méi)有安裝 telnet 軟件,使用前需要手動(dòng)安裝。如果只是進(jìn)行簡(jiǎn)單的測(cè)試,未來(lái)使用場(chǎng)景也不多,安裝它可能是一種資源浪費(fèi)。

但是,如果安裝了 Python,那就不必下載安裝 telnet,因?yàn)?Python 內(nèi)置了 telnet 對(duì)應(yīng)的模塊。我們可以對(duì) Google 搜索網(wǎng)站的 443 端口進(jìn)行測(cè)試。

python?-m?telnetlib?-d?142.250.70.174?443
圖片

如上圖所示,網(wǎng)絡(luò)流量顯示正常,我們甚至收到了來(lái)自 Google 空字符的響應(yīng)。如果我們嘗試訪問(wèn) ip 的隨機(jī)一個(gè)端口,則會(huì)拋出錯(cuò)誤,如下圖所示。

python?-m?telnetlib?-d?142.250.70.174?999
圖片

2. 本地啟動(dòng) web 服務(wù)

很多 Python 使用者不知道這一點(diǎn),當(dāng)?shù)谝淮温?tīng)說(shuō)后會(huì)感到驚訝。是的,我們可以使用 Python 啟動(dòng) web 服務(wù),而無(wú)需編寫(xiě)任何代碼,只需按如下方式在命令行執(zhí)行如下命令。

python?-m?http.server
圖片

運(yùn)行后,顯示該服務(wù)監(jiān)聽(tīng)了本地的 8000 端口,然后,我們就可以嘗試從瀏覽器進(jìn)行訪問(wèn) http://localhost:8000/。

圖片

該 web 服務(wù)會(huì)以根目錄的形式展示在命令啟動(dòng)路徑下的本地文件系統(tǒng),換句話說(shuō),我們無(wú)法訪問(wèn)它的父級(jí)目錄。

你可能會(huì)問(wèn),這個(gè)功能的使用場(chǎng)景是什么。舉一個(gè)例子,如果你想跟你的好伙伴們分享你電腦某個(gè)目錄下的許多文本/PDF/圖像文件/子目錄文件等,那么使用這個(gè)方法就可以非常輕松地進(jìn)行共享了。

圖片

如果你想知道更多關(guān)于這個(gè)話題的內(nèi)容,可以參考3 Lines of Python Code to Write A Web Server這篇文章。如果你按照上面的文章實(shí)現(xiàn)了一個(gè)“低代碼”的解決方案,那么就可以向它添加更多的自定義功能了。

3. 驗(yàn)證及格式化?JSON 字符串

如果你有一個(gè)非常長(zhǎng)且未經(jīng)格式化的 JSON 字符串,那么閱讀起來(lái)會(huì)非常困難。通常,我會(huì)使用一些帶有 JSON 插件的文本編輯器,比如 Sublime 或者 VS Code,來(lái)格式化 JSON 字符串。但是,如果手頭沒(méi)有這些工具,Python 可以臨時(shí)一用。比如下面會(huì)以這個(gè)簡(jiǎn)短的 JSON 字符串進(jìn)行展示。

echo?'{"name":?{"first_name":"Chris",?"last_name":"Tao"}?"age":33}'
圖片

可以看到,當(dāng)前操作系統(tǒng)的命令行工具只能按照原字符串的原始格式進(jìn)行展示。但是,如果借助 Python 的?json.tool工具,JSON 字符串就會(huì)被很好的格式化。

echo?'{"name":?{"first_name":"Chris",?"last_name":"Tao"}?"age":33}'?|?python?-m?json.tool
圖片

Oops!JSON 字符串無(wú)效,并且 json.tool 幫助我們定位了問(wèn)題。我們?cè)诿Q對(duì)象后面漏掉了一個(gè)逗號(hào)。所以添加逗號(hào)以使該 JSON 合法有效。

echo?'{"name":?{"first_name":"Chris",?"last_name":"Tao"},?"age":33}'?|?python?-m?json.tool
圖片

現(xiàn)在,JSON 字符串具有了完美縮進(jìn)的格式化輸出!更加方便閱讀。

4. 創(chuàng)建文本編輯器

你沒(méi)看錯(cuò),我們可以使用 Python 來(lái)”創(chuàng)建”一個(gè)文本編輯器。當(dāng)然,它的功能非常有限,但是如果當(dāng)前沒(méi)有更好的選擇,使用它會(huì)方便很多。另外,功能上肯定無(wú)法與 Vim 和 Nanos 相比,但是它完全是基于 UI 編輯器而不是命令行文本形式。這個(gè)編輯器由基于 Tkinter 實(shí)現(xiàn)的idlelib?模塊創(chuàng)建,所以它是可以跨平臺(tái)運(yùn)行的。

假設(shè)我們要編寫(xiě)一個(gè)簡(jiǎn)單的 Python 程序來(lái)顯示當(dāng)前的時(shí)間,我想快速編寫(xiě)代碼而不想下載和安裝龐大的代碼編輯工具。現(xiàn)在讓我們運(yùn)行下面這個(gè)命令。

mkdir?get_time_apppython?-m?idlelib?get_time_app/print_time.py

如果文件目錄不存在,idlelib將無(wú)法創(chuàng)建,因此如果必要,我們需要?jiǎng)?chuàng)建一個(gè)。我們運(yùn)行完這個(gè)命令之后,print_time.py 只有執(zhí)行保存的情況下才會(huì)創(chuàng)建到本地。現(xiàn)在應(yīng)該會(huì)彈出編輯器,我們可以在里面寫(xiě)一些代碼, 可以看到代碼是支持語(yǔ)法高亮的。

圖片

現(xiàn)在我們使用ctrl+s快捷鍵對(duì)編輯好的代碼進(jìn)行保存,并關(guān)閉編輯窗口。接下來(lái)使用命令行查看一下編輯好的代碼文件進(jìn)行驗(yàn)證,沒(méi)有任何問(wèn)題。

cat?get_time_app/print_time.py
圖片

5. 創(chuàng)建可執(zhí)行應(yīng)用程序

如果我們想要?jiǎng)?chuàng)建一個(gè)簡(jiǎn)單的應(yīng)用,比如前面寫(xiě)的獲取當(dāng)前時(shí)間的應(yīng)用程序,我們不必再需要像 PyInstaller 這樣的第三方工具包,Python 內(nèi)置的 Zipapp 就可以做到。假設(shè)我們要打包成一個(gè)"Get Time"的應(yīng)用,我們可以在命令行運(yùn)行下面的命令。

python?-m?zipapp?get_time_app?-m?"print_time:main"

在該命令中,我們只需要給?zipapp設(shè)置get_time_app名稱,指定 Python 程序的入口文件及其程序入口函數(shù)即可。以.pyz為擴(kuò)展名的文件就是我們創(chuàng)建的應(yīng)用程序,至此我們就可以將項(xiàng)目作為單個(gè)文件而不是文件夾進(jìn)行分發(fā)。

圖片

該程序的啟動(dòng)方式也很簡(jiǎn)單,直接使用 Python 進(jìn)行調(diào)用即可。

python?get_time_app.pyz
圖片

6. 編碼和解碼字符串或文件

通過(guò) Python CLI,我們可以加密字符串或文件。我們以有趣的 ROT13 加密算法為例進(jìn)行展示。ROT13 是一種偏移 13 位的凱撒密碼,它的加密原理如下圖所示。

圖片

我們可以使用?encodings.rot_13?來(lái)加密一個(gè)字符串,命令如下。

echo?"I?am?Chris"?|?python?-m?encodings.rot_13
圖片

切記,不要將其用于任何真正的加密內(nèi)容。因?yàn)橛⑽挠?26 個(gè)字母,所以再次運(yùn)行這個(gè)算法我們可以很容易地破譯這個(gè)加密字符串:)

echo?'V?nz?Puevf'?|?python?-m?encodings.rot_13
圖片

現(xiàn)在讓我們嘗試一個(gè)更常見(jiàn)的場(chǎng)景——base64 編碼。我們可以對(duì)字符串進(jìn)行 base64 編碼,如下所示。

echo?"I?am?Chris"?|?python?-m?base64
圖片

接下來(lái),我們也可以使用-d參數(shù)對(duì)加密字符串進(jìn)行解碼。

echo?"SSBhbSBDaHJpcwo="?|?python?-m?base64?-d
圖片

base64 也經(jīng)常用在對(duì)圖像文件的編碼和解碼上。我們也可以對(duì)文件進(jìn)行如下編碼。

python?-m?base64?get_time_app/print_time.py??
圖片

非常有趣的是,解碼后的 Python 腳本可以即時(shí)執(zhí)行,不會(huì)報(bào)錯(cuò)。。

echo?"ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCgpkZWYgbWFpbigpOgogICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUubm93KCkKICAgIHByaW50KGYnQ3VycmVudCB0aW1lIGlzIHtjdXJyZW50X3RpbWV9LicpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo="?|?python?-m?base64?-d?|?python
圖片

7. 獲取系統(tǒng)元數(shù)據(jù)

如果我們想獲取當(dāng)前的系統(tǒng)信息,Python 提供了一種非常簡(jiǎn)便的方法。我們只需要運(yùn)行下面的命令即可。

python?-m?sysconfig
圖片

可以看到,這個(gè)命令執(zhí)行后會(huì)顯示所有的系統(tǒng)配置信息,比如 Python 環(huán)境路徑和環(huán)境變量等。上面的截圖僅僅展示了一部分內(nèi)容,實(shí)際顯示的內(nèi)容會(huì)非常豐富。如果我們只想展示 Python 環(huán)境路徑和當(dāng)前工作路徑,我們可以執(zhí)行下面的命令。

python?-m?site
圖片

8. 文件壓縮

我們可以使用 Python 來(lái)壓縮文件,而無(wú)需下載 tar/zip/gzip 等工具。舉個(gè)例子,如果我們想壓縮我們剛剛在第 4 節(jié)中編寫(xiě)的應(yīng)用程序,我們可以運(yùn)行以下命令將文件夾壓縮到 zip 文件中。在命令中,選項(xiàng) -c 代表的是“create”即創(chuàng)建的含義。

python?-m?zipfile?-c?get_time_app.zip?get_time_app
圖片

當(dāng)然,我們也可以對(duì)壓縮文件進(jìn)行解壓。緊接這上面的操作,我們把文件夾解壓出來(lái)放到一個(gè)新目錄中,這樣就不會(huì)和原來(lái)的目錄沖突了。在下面的命令中,選項(xiàng) -e 代表“extract”即解壓的含義。

python?-m?zipfile?-e?get_time_app.zip?get_time_app_extracted

如果不放心,我們可以檢驗(yàn)一下。

ls?get_time_app_extractedcat?get_time_app_extracted/get_time_app/print_time.py
圖片

我們剛剛以 zip 文件為例進(jìn)行了展示,Python 除了支持 zip 格式的解壓縮以外,還支持 tar 和 gzip 的解壓縮。

總結(jié)

該篇文章中介紹了一種無(wú)需編寫(xiě)任何代碼即可使用 Python 內(nèi)置庫(kù)的方法。如果在某些場(chǎng)景下能夠想到使用這些方法,毫無(wú)疑問(wèn)可以給我們提供很多的便利。希望這篇文章能夠給大家?guī)?lái)啟發(fā)和幫助。

作者:Christopher Tao

譯者:王坤祥@InfoQ

原文:Eight “No-Code” Features In Python (https://towardsdatascience.com/eight-no-code-features-in-python-15744e8c01f4)

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 福建省| 冷水江市| 石河子市| 定陶县| 阿尔山市| 广安市| 驻马店市| 汉中市| 白山市| 娱乐| 临城县| 孝昌县| 闸北区| 浮山县| 申扎县| 德化县| 桂平市| 马公市| 阜平县| 临武县| 新闻| 东阳市| 龙川县| 新津县| 噶尔县| 韶关市| 郎溪县| 南汇区| 广灵县| 吴忠市| 崇文区| 建昌县| 天水市| 革吉县| 太湖县| 合山市| 江达县| 平谷区| 连南| 莱芜市| 布拖县|