溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pythonic的使用方法有哪些

發(fā)布時間:2021-10-26 09:23:34 來源:億速云 閱讀:126 作者:iii 欄目:web開發(fā)

這篇文章主要講解了“Pythonic的使用方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Pythonic的使用方法有哪些”吧!

1. 變量交換

交換兩個變量的值,正常都會想利用一個中間臨時變量來過渡。

tmp = a a = b b = tmp

能用一行代碼解決的(并且不影響可讀性的),決不用三行代碼。

a,bb = b,a

2. 列表推導

下面是一個非常簡單的 for 循環(huán)。

my_list = [] for i in range(10):     my_list.append(i*2)

在一個 for 循環(huán)中,如果邏輯比較簡單,不如試用一下列表的列表推導式,雖然只有一行代碼,但也邏輯清晰。

my_list = [i*2 for i in range(10)]

3. 單行表達式

上面兩個案例,都將多行代碼用另一種方式寫成了一行代碼。

這并不意味著,代碼行數(shù)越少,就越 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 循環(huán)時,如何取得對應的索引,初學者習慣使用 range + len 函數(shù)

for i in range(len(my_list)):     print(i, "-->", my_list[i])

更好的做法是利用 enumerate 這個內置函數(shù)

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 函數(shù)

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. 操作列表

下面這段代碼,會根據(jù)條件過濾過列表中的元素

a = [3, 4, 5] b = [] for i in a:     if i > 4:         b.append(i)

實際上可以使用列表推導或者高階函數(shù) filter 來實現(xiàn)

a = [3, 4, 5] b = [i for i in a if i > 4] # Or: b = filter(lambda x: x > 4, a)

除了 filter 之外,還有 map、reduce 這兩個函數(shù)也很好用

a = [3, 4, 5] b = map(lambda i: i + 3, a) # b: [6,7,8]

10. 文件讀取

文件讀取是非常常用的操作,在使用完句柄后,是需要手動調用 close 函數(shù)來關閉句柄的

fp = open('file.txt') print(fp.read()) fp.close()

如果代碼寫得太長,即使你知道需要手動關閉句柄,卻也會經(jīng)常會漏掉。因此推薦養(yǎng)成習慣使用 with open  來讀寫文件,上下文管理器會自動執(zhí)行關閉句柄的操作

with open('file.txt') as fp:     for line in fp.readlines():         print(line)

11. 代碼續(xù)行

將一個長度較長的字符串放在一行中,是很影響代碼可讀性的(下面代碼可向左滑動)

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&rsquo;m going to sleep.”'

稍等注重代碼可讀性的人,會使用三個引號 \來續(xù)寫

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&rsquo;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&rsquo;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())

但若非必要,請不要那么做。無端增加代碼的不確定性,會讓原先本就動態(tài)的語言寫出更加動態(tài)的代碼。

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的使用方法有哪些”的內容了,經(jīng)過本文的學習后,相信大家對Pythonic的使用方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI