當前位置:
首頁 > 知識 > 其他語言無法比擬的6個Python特性

其他語言無法比擬的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 的精彩文章:

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