#1 Python靈活技巧
前言
Python基礎系列博文已順利結束,從這一篇開始將進入探索更加高階的Python用法,Python進階系列文章將包含面向物件、網路程式設計、GUI程式設計、執行緒和程序、連線資料庫等。不過在進階之前,先來熟練使用一些Python的小技巧,這就好像作業系統的快捷鍵一樣,熟練掌握這些小技巧會讓你工作起來事半功倍,話不多說,盤它!
Python常用技巧
技巧一:加速pip安裝
使用pip安裝第三方模組時,網速總是很慢,這是因為pip的映象源在國外,如果換成國內穩定的映象源速度將會飛起,這裡推薦豆瓣的映象源
「本次安裝時更改為豆瓣映象源,使用 -i 指定映象源」
pip install -i https://pypi.douban.com/simple 模組
「永久更改為豆瓣映象源,推薦」
Linux/macOS平臺:
修改pip的配置檔案,檔案位置~/.pip/.pip.conf(如果沒有自己建立即可),將其改為如下內容儲存:
[global] index-url = https://pypi.douban.com/simple
Windows平臺:
開啟資源管理器,在位址列輸入%appdata%後回車,在此位置新建pip資料夾,進入pip資料夾,新建pip.ini檔案,滑鼠右鍵用記事本開啟,輸入如下內容儲存:
[global] index-url = https://pypi.douban.com/simple
技巧二:pip命令補全
pip命令可以想Linux命令一樣使用tab鍵補全,只需執行如下命令即可:
Linux/macOS平臺:
「bash使用者」
$ pip completion -b >> ~/.profile
「zsh使用者」
$ pip completion -z >> ~/.zshrc
技巧三:pip批量安裝模組
有時一個Python專案需要用到大量第三方模組,手動使用pip一條一條安裝是不現實的,這時就要使用批量安裝了,將需要的模組寫入requirements.text檔案中,一個模組佔用一行,模組名必須有,版本號可有可無(通常專案開發者會建立這個檔案,方便其他使用者安裝模組),這時使用pip批量安裝即可:
$ pip install -r requirements.text
技巧四:檢測模組是否正確安裝
當我們安裝了一個第三方模組時,第一步總是要檢測其是否正確安裝,通常做法是開啟python互動介面,輸入 import 模組 回車後如果不丟擲異常則證明成功安裝,否則安裝失敗。這種方法應對一兩個模組還行,但是如果需要檢測上百個模組怎麼辦?這時就需要命令方式來檢測了:
$ python -c 'import jieba'# jieba模組已經正確安裝,不會返回任何資訊 $ python -c 'import flask'# flask模組沒有安裝,丟擲異常 Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'flask'
使用這種命令的方式可以大大的提高檢測效率,只需要編寫一個Shell或者Python指令碼就可以實現了
技巧五:快速將json字串轉換為字典格式
有時需要將一個json字串轉換為字典,但是又不想新建Python檔案匯入json模組,那怎麼辦呢?快洗洗睡哇!!!其實還真有辦法,那就是使用json.tool在命令列直接解析:
$ echo '{"name": "MinuteSheep", "age": 99, "gender": "male"}' | python -m json.tool { "name": "MinuteSheep", "age": 99, "gender": "male" }
可以看到非常方便,連格式都自動格式化了
技巧六:秒開下載伺服器
日常生活中,經常要拷貝和被拷貝同學或者同事的檔案,要麼用U盤,要麼登入QQ,總感覺很煩!!!此時,使用Python秒開一個下載伺服器將會解決你的所有煩惱,尤其是對於在同一個網路環境下的使用者。將需要傳給同事的檔案拷貝到一個資料夾,之後在這個資料夾中輸入如下命令:
$ python -m http.server Serving HTTP on 0.0.0.0 port 8000 ...
這時候在同一個網路下的使用者便可以用瀏覽器訪問這個目錄了(訪問方法:假如我的IP地址為123.123.123.123,其他使用者只需在瀏覽器位址列輸入:123.123.123.123:8000)點選檔案下載即可,超方便有沒有,這該死的無處安放的魅力啊~
技巧七:同時遍歷多個可迭代物件
有時在處理資料的時候,經常出現這種情況:名字有一個單獨的列表,性別有一個單獨的列表,年齡有一個單獨的列表,當你想一一對應的時候,一定會嘗試這樣做:
In [1]: name = ['aa','bb','cc','dd','ff'] In [2]: age = [12,13,14,15,14] In [3]: gender = ['m','f','m','f','f'] In [4]: for n,a,g in name,age,gender: ...:print(n,a,g) ...: --------------------------------------------------------------------------- ValueErrorTraceback (most recent call last) <ipython-input-4-c3abaee834b9> in <module> ----> 1 for n,a,g in name,age,gender: 2print(n,a,g) 3 ValueError: too many values to unpack (expected 3) # 可以看到丟擲引數過多異常,列表不能迭代超過一個:hear_no_evil::hear_no_evil::hear_no_evil::hear_no_evil::hear_no_evil:
這時就要使用內建函式zip,縫合它!
In [1]: name = ['aa','bb','cc','dd','ff'] In [2]: age = [12,13,14,15,14] In [3]: gender = ['m','f','m','f','f'] In [5]: for n,a,g in zip(name,age,gender): ...:print(n,a,g) ...: aa 12 m bb 13 f cc 14 m dd 15 f ff 14 f # 正確!:speak_no_evil::speak_no_evil::speak_no_evil::speak_no_evil::speak_no_evil:
技巧八:批量將字串格式轉換為數字格式
假如你有一個列表
num = ['1', '23.4', '34.7', '12']
現在需要將列表裡的元素轉換為數字格式進行計算,要怎麼辦呢?煩sky人~~這樣幹:
In [21]: num = ['1', '23.4', '34.7', '12']# 元素為字串型 In [22]: num = list(map(float, num))# 使用內建函式map返回一個map物件,再用list將其轉換為列表 In [23]: num# 元素變為浮點型 Out[23]: [1.0, 23.4, 34.7, 12.0]