其他語言無法比擬的6個Python特性
Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。
Python有著豐富精巧的功能和技巧,會讓你驚嘆「哇!Python這麼酷」。
我們選取了一些我們很喜歡的功能並在下文中依次展示。希望你能從中學習到一些東西,並感到吃驚「我學完才知道這樣寫代碼更整潔」。
生成器
Collections模塊
Itertools模塊
Packing/Unpacking
裝飾器
上下文管理器
源代碼在GitHub(https://github.com/CodinGame/advanced-python-features-playground )上,歡迎提出想法來改進。
生成器
生成器是產生一個值的序列的對象。它可以用作迭代器,也就是說它可以用於for語句,或者用於next函數中來得到下一個值。但是你只能迭代一次值。
可以通過一個使用yield關鍵字來生成值的函數創建生成器。當調用生成器函數時,將創建一個生成器對象。
yield操作符
對於簡單的情況,可以使用生成器表達式創建生成器。與列表相反,值將在運行中計算,而不是一次性全部計算並存儲在內存中。
生成器表達式
Collections模塊
collections是標準庫中實現替代容器數據類型的一個模塊。
例如,一個Counter是一個集合,其中元素被存儲為字典的鍵,而它們的計數被存儲為字典的值:
計數器
defaultdict是dict的
一個子類,它允許調用時傳入一個工廠函數,這個函數在鍵值缺失時自動生成新的值。
defaultdict
defaultdict還可用於創建一個樹型數據結構。
樹
Itertools模塊
itertools是標準庫中的一個模塊,可用於創建迭代器以實現有效的循環。
例如,permutations會生成一組序列的所有可能排列:
permutations
類似地,combinations會根據所選擇的項目個數n,生成一組序列中
的所有可能的n項的組合方式,使得(不同於permutations)順序無關緊要:
combinations
itertools還包含其他實用函數,例如chain,它採用迭代方式,創建一個新的迭代器,由給定的迭代順序返回元素形成單個序列:
chain
Packing/Unpacking
*運算符,被稱為拆包或splat運算符,允許非常方便的從列表或元組到獨立的變數或參數的轉換,反之亦可。
擴展可迭代序列的拆包
當你的函數的參數已經在列表或元組中,可對其拆包。如果是列表你可以用*args來拆包,如果是字典就用**kwargs。
Unpacking參數
反過來也是可以的,你可以定義一個函數,將單個tuple里的所有參數和單個dict里的所有的關鍵字參數組包。
關鍵字參數
裝飾器
裝飾器是一個接受函數作為參數並返回函數的函數。
例如,在下面的代碼中,cache函數用作裝飾器來記住已經計算出的斐波那契數:
裝飾器
functools模塊提供了幾個裝飾器,例如lru_cache,它可以實現我們剛剛做的:存儲。當使用相同的參數調用給定的函數時,它可以保存最近的調用來節省時間:
Iru_cache
上下文管理器
上下文管理器主要用於正確管理資源。上下文管理器最常用的用途是通過語句with open("workfile", "r") as f:打開文件。然而,大多數開發人員不知道其內部是如何運作的,也不知道如何自己創建。
實際上,一個上下文管理器只是一個實現方法__enter__和__exit__的類。
上下文管理器
簡單使用時,也可以使用帶有yiel
d關鍵字的生成器函數,也可使用@contextmanager裝飾器。
使用
@contextmanager的上下文管理器
希望您喜歡我們在Pytho
n 3中選擇實現的這幾個最佳功能,請在論壇或Github上踴躍分享您的反饋:)
英文原文:https://tech.io/playgrounds/500/advanced-python-features/content/advanced-python-features
譯者:Chara
※Python中 else 塊那點事
※實戰Python讀寫Excel實例應用
※神經網路理論基礎及 Python 實現
TAG:Python |
※Facebook Libra的Move語言與其他語言有什麼不同?
※Salmon:一個基於Python語言的郵件伺服器
※我為什麼要從 Python 轉向 Crystal 語言
※Google Duplex證明人類語言是唯一重要的API
※Stream:我們為何要從Python轉到Go語言?
※身體的語言 ya.tender
※好文翻譯丨我為什麼要從 Python 轉向 Crystal 語言
※「轉載」Python與C語言的異同
※Mercari Price 比賽分享——語言不僅是演算法和公式而已
※對話 Salesforce 首席科學家 Richard Socher:選擇 ML 是出於對數學和語言的熱愛
※除了Scratch 還有這些語言可以選
※Python語言環境配置
※身體的語言 ya.tender-1
※Firefox Reality VR瀏覽器支持7種新語言,書籤等
※哪個語言敢脫離CPU?python
※GitHub獲贊過千:PyTorch 自然語言處理項目Top 5
※用於自然語言處理的開源 Python庫——PyTorch-NLP
※大師語言 | John William Godward
※GitHub趨勢榜第二名:解析、對比不同編程語言的Semantic庫
※黑客將Python作為攻擊編碼語言的首選,人生苦短,我用Python