15個Pythonic的程式碼示例(值得收藏)
Python由於語言的簡潔性,讓我們以人類思考的方式來寫程式碼,新手更容易上手,老鳥更愛不釋手。
要寫出 Pythonic(優雅的、地道的、整潔的)程式碼,還要平時多觀察那些大牛程式碼,Github 上有很多非常優秀的原始碼值得閱讀,比如:requests、flask、tornado,這裡小明收集了一些常見的 Pythonic 寫法,幫助你養成寫優秀程式碼的習慣。
01. 變數交換
Bad
tmp = a a = b b = tmp
Pythonic
a,b = b,a
02. 列表推導
Bad
my_list = [] for i in range(10): my_list.append(i*2)
Pythonic
my_list = [i*2 for i in range(10)]
03. 單行表示式
雖然列表推導式由於其簡潔性及表達性,被廣受推崇。
但是有許多可以寫成單行的表示式,並不是好的做法。
Bad
print 'one'; print 'two' if x == 1: print 'one' if <complex comparison> and <other complex comparison>: # do something
Pythonic
print 'one' print 'two' if x == 1: print 'one' cond1 = <complex comparison> cond2 = <other complex comparison> if cond1 and cond2: # do something
04. 帶索引遍歷
Bad
for i in range(len(my_list)): print(i,"-->",my_list[i])
Pythonic
for i,item in enumerate(my_list): print(i,item)
05. 序列解包
Pythonic
a,*rest = [1,2,3] # a = 1,rest = [2,3] a,*middle,c = [1,3,4] # a = 1,middle = [2,3],c = 4
06. 字串拼接
Bad
letters = ['s','p','a','m'] s="" for let in letters: s += let
Pythonic
letters = ['s','m'] word = ''.join(letters)
07. 真假判斷
Bad
if attr == True: print 'True!' if attr == None: print 'attr is None!'
Pythonic
if attr: print 'attr is truthy!' if not attr: print 'attr is falsey!' if attr is None: print 'attr is None!'
08. 訪問字典元素
Bad
d = {'hello': 'world'} if d.has_key('hello'): print d['hello'] # prints 'world' else: print 'default_value'
Pythonic
d = {'hello': 'world'} print d.get('hello','default_value') # prints 'world' print d.get('thingy','default_value') # prints 'default_value' # Or: if 'hello' in d: print d['hello']
09. 操作列表
Bad
a = [3,4,5] b = [] for i in a: if i > 4: b.append(i)
Pythonic
a = [3,5] b = [i for i in a if i > 4] # Or: b = filter(lambda x: x > 4,a)
Bad
a = [3,5] for i in range(len(a)): a[i] += 3
Pythonic
a = [3,5] a = [i + 3 for i in a] # Or: a = map(lambda i: i + 3,a)
10. 檔案讀取
Bad
f = open('file.txt') a = f.read() print a f.close()
Pythonic
with open('file.txt') as f: for line in f: print line
11. 程式碼續行
Bad
my_very_big_string = """For a long time I used to go to bed early. Sometimes,\ when I had put out my candle,my eyes would close so quickly that I had not even \ time to say “I'm going to sleep.”""" from some.deep.module.inside.a.module import a_nice_function,another_nice_function,\ yet_another_nice_function
Pythonic
my_very_big_string = ( "For a long time I used to go to bed early. Sometimes," "when I had put out my candle,my eyes would close so quickly " "that I had not even time to say “I'm going to sleep.”" ) from some.deep.module.inside.a.module import ( a_nice_function,yet_another_nice_function)
12. 顯式程式碼
Bad
def make_complex(*args): x,y = args return dict(**locals())
Pythonic
def make_complex(x,y): return {'x': x,'y': y}
13. 使用佔位符
Pythonic
filename = 'foobar.txt' basename,_,ext = filename.rpartition('.')
14. 鏈式比較
Bad
if age > 18 and age < 60: print("young man")
Pythonic
if 18 < age < 60: print("young man")
理解了鏈式比較操作,那麼你應該知道為什麼下面這行程式碼輸出的結果是 False
>>> False == False == True False
15. 三目運算
這個保留意見。隨使用習慣就好。
Bad
if a > 2: b = 2 else: b = 1 #b = 2
Pythonic
a = 3 b = 2 if a > 2 else 1 #b = 2
參考文件
http://docs.python-guide.org/en/latest/writing/style/
https://foofish.net/idiomatic_part2.html
到此這篇關於15個Pythonic的程式碼示例(值得收藏)的文章就介紹到這了,更多相關Pythonic程式碼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!