本文主要向大家介紹了讓你的Python語言代碼優雅又道地,通過具體的内容向大家展示,希望對大家學習Python語言有所幫助。
如果說優雅也有缺點的話,那就是你需要艱巨的工作才能得到它,需要良好的教育才能欣賞它。
—— Edsger Wybe Dijkstra
在Python社群文化的澆灌下,演化出了一種獨特的代碼風格,去指導如何正确地使用Python,這就是常說的pythonic。一般說道地(idiomatic)的python代碼,就是指這份代碼很pythonic。Python的文法和标準庫設計,處處契合着pythonic的思想。而且Python社群十分注重編碼風格一的一緻性,他們極力推行和處處實踐着pythonic。是以經常能看到基于某份代碼P vs NP (pythonic vs non-pythonic)的讨論。pythonic的代碼簡練,明确,優雅,絕大部分時候執行效率高。閱讀pythonic的代碼能體會到“代碼是寫給人看的,隻是順便讓機器能運作”暢快。
然而什麼是pythonic,就像什麼是道地的漢語一樣,切實存在但标準模糊。import this可以看到Tim Peters提出的Python之禅,它提供了指導思想。許多初學者都看過它,深深贊同它的理念,但是實踐起來又無從下手。PEP 8給出的不過是編碼規範,對于實踐pythonic還遠遠不夠。如果你正被如何寫出pythonic的代碼而困擾,或許這份筆記能給你幫助。
示例代碼和引用的語錄都來自Raymond的演講。這是我按我的了解整理出來的,希望你們了解起來跟我一樣順暢!
周遊一個範圍内的數字
for i in [0, 1, 2, 3, 4, 5]:
print i ** 2
for i in range(6):
print i ** 2
更好的方法
for i in xrange(6):
print i ** 2
xrange會傳回一個疊代器,用來一次一個值地周遊一個範圍。這種方式會比range更省記憶體。xrange在Python 3中已經改名為range。
周遊一個集合
colors = ['red', 'green', 'blue', 'yellow']
for i in range(len(colors)):
print colors[i]
更好的方法
for color in colors:
print color
反向周遊
colors = ['red', 'green', 'blue', 'yellow']
for i in range(len(colors)-1, -1, -1):
print colors[i]
更好的方法
for color in reversed(colors):
print color
周遊一個集合及其下标
colors = ['red', 'green', 'blue', 'yellow']
for i in range(len(colors)):
print i, '--->', colors[i]
更好的方法
for i, color in enumerate(colors):
print i, '--->', color
這種寫法效率高,優雅,而且幫你省去親自建立和自增下标。
當你發現你在操作集合的下标時,你很有可能在做錯事。
周遊兩個集合
names = ['raymond', 'rachel', 'matthew']
colors = ['red', 'green', 'blue', 'yellow']
n = min(len(names), len(colors))
for i in range(n):
print names[i], '--->', colors[i]
for name, color in zip(names, colors):
print name, '--->', color
更好的方法
for name, color in izip(names, colors):
print name, '--->', color
zip在記憶體中生成一個新的清單,需要更多的記憶體。izip比zip效率更高。
注意:在Python 3中,izip改名為zip,并替換了原來的zip成為内置函數。
本文由職坐标整理并釋出,希望對同學們學習Python有所幫助,更多内容請關注職坐标程式設計語言Python頻道!