您好,登錄后才能下訂單哦!
這篇文章主要講解了“Pythonic的使用方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Pythonic的使用方法有哪些”吧!
1. 變量交換
交換兩個變量的值,正常都會想利用一個中間臨時變量來過渡。
tmp = a a = b b = tmp
能用一行代碼解決的(并且不影響可讀性的),決不用三行代碼。
a,bb = b,a
2. 列表推導
下面是一個非常簡單的 for 循環。
my_list = [] for i in range(10): my_list.append(i*2)
在一個 for 循環中,如果邏輯比較簡單,不如試用一下列表的列表推導式,雖然只有一行代碼,但也邏輯清晰。
my_list = [i*2 for i in range(10)]
3. 單行表達式
上面兩個案例,都將多行代碼用另一種方式寫成了一行代碼。
這并不意味著,代碼行數越少,就越 Pythonic 。
比如下面這樣寫,就不推薦。
print('hello'); print('world') if x == 1: print('hello,world') if <complex comparison> and <other complex comparison>: # do something
建議還是按照如下的寫法來
print('hello') print('world') if x == 1: print('hello,world') cond1 = <complex comparison> cond2 = <other complex comparison> if cond1 and cond2: # do something
4. 帶索引遍歷
使用 for 循環時,如何取得對應的索引,初學者習慣使用 range + len 函數
for i in range(len(my_list)): print(i, "-->", my_list[i])
更好的做法是利用 enumerate 這個內置函數
for i,item in enumerate(my_list): print(i, "-->",item)
5. 序列解包
使用 * 可以對一個列表解包
a, *rest = [1, 2, 3] # a = 1, rest = [2, 3] a, *middle, c = [1, 2, 3, 4] # a = 1, middle = [2, 3], c = 4
6. 字符串拼接
如果一個列表(或者可迭代對象)中的所有元素都是字符串對象,想要將他們連接起來,通常做法是
letters = ['s', 'p', 'a', 'm'] s="" for let in letters: s += let
更推薦的做法是使用 join 函數
letters = ['s', 'p', 'a', 'm'] word = ''.join(letters)
7. 真假判斷
判斷一個變量是否為真(假),新手習慣直接使用 == 與 True、False、None 進行對比
if attr == True: print('True!') if attr == None: print('attr is None!')
實際上,""、[]、{} 這些沒有任何元素的容器都是假值,可直接使用 if not xx 來判斷。
if attr: print('attr is truthy!') if not attr: print('attr is falsey!')
8. 訪問字典元素
當直接使用 [] 來訪問字典里的元素時,若key不存在,是會拋異常的,所以新會可能會先判斷一下是否有這個 key,有再取之。
d = {'hello': 'world'} if d.has_key('hello'): print(d['hello']) # prints 'world' else: print('default_value')
更推薦的做法是使用 get 來取,如果沒有該 key 會默認返回 None(當然你也可以設置默認返回值)
d = {'hello': 'world'} print(d.get('hello', 'default_value')) # prints 'world' print(d.get('thingy', 'default_value')) # prints 'default_value'
9. 操作列表
下面這段代碼,會根據條件過濾過列表中的元素
a = [3, 4, 5] b = [] for i in a: if i > 4: b.append(i)
實際上可以使用列表推導或者高階函數 filter 來實現
a = [3, 4, 5] b = [i for i in a if i > 4] # Or: b = filter(lambda x: x > 4, a)
除了 filter 之外,還有 map、reduce 這兩個函數也很好用
a = [3, 4, 5] b = map(lambda i: i + 3, a) # b: [6,7,8]
10. 文件讀取
文件讀取是非常常用的操作,在使用完句柄后,是需要手動調用 close 函數來關閉句柄的
fp = open('file.txt') print(fp.read()) fp.close()
如果代碼寫得太長,即使你知道需要手動關閉句柄,卻也會經常會漏掉。因此推薦養成習慣使用 with open 來讀寫文件,上下文管理器會自動執行關閉句柄的操作
with open('file.txt') as fp: for line in fp.readlines(): print(line)
11. 代碼續行
將一個長度較長的字符串放在一行中,是很影響代碼可讀性的(下面代碼可向左滑動)
long_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.”'
稍等注重代碼可讀性的人,會使用三個引號 \來續寫
long_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.”'
不過,對我來說,我更喜歡這樣子寫 使用括號包裹 ()
long_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)
12. 顯式代碼
有時候出于需要,我們會使用一些特殊的魔法來使代碼適應更多的場景不確定性。
def make_complex(*args): x, y = args return dict(**locals())
但若非必要,請不要那么做。無端增加代碼的不確定性,會讓原先本就動態的語言寫出更加動態的代碼。
def make_complex(x, y): return {'x': x, 'y': y}
13. 使用占位符
對于暫不需要,卻又不得不接收的的變量,請使用占位符
filename = 'foobar.txt' basename, _, ext = filename.rpartition('.')
14. 鏈式比較
對于下面這種寫法
score = 85 if score > 80 and score < 90: print("良好")
其實還有更好的寫法
score = 85 if 80 < score < 90: print("良好")
如果你理解了上面的鏈式比較操作,那么你應該知道為什么下面這行代碼輸出的結果是 False
>>> False == False == True False
15. 三目運算
對于簡單的判斷并賦值
age = 20 if age > 18: type = "adult" else: type = "teenager"
其實是可以使用三目運算,一行搞定。
age = 20 b = "adult" if age > 18 else "teenager"
感謝各位的閱讀,以上就是“Pythonic的使用方法有哪些”的內容了,經過本文的學習后,相信大家對Pythonic的使用方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。