av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Pythonic風格代碼有什么好處?附12個代碼實例

 pythonic是開發(fā)者們在寫python代碼過程中總結(jié)的編程習慣,崇尚優(yōu)雅、明確、簡單。就好比中文筆畫,有先后順序,最符合文字書寫的習慣。

成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目做網(wǎng)站、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元瀾滄做網(wǎng)站,已為上家服務,為瀾滄各地企業(yè)和個人服務,聯(lián)系電話:13518219792

因為是習慣,不是江湖規(guī)則,所以你大可不必遵守pythonic,但如果你想成為python高手,最好是養(yǎng)成這個習慣。

對比其他語言我們能直觀看出pythonic風格的特點,比如寫一個簡單循環(huán)。

在Java里這樣的:

 
 
 
 
  1. for index in (index; index < items.length ; index++) 
  2.  { 
  3.   item = items[index]; 
  4.  ... now do something 
  5.  } 

嘗試用python來寫循環(huán),則非常簡潔易懂:

 
 
 
 
  1. for item in items: 
  2.   item.perform_action() 

想要更加pythonic,用生成器表達式來寫循環(huán):

 
 
 
 
  1. (item.some_attribute for item in items) 

這樣的寫法其實已經(jīng)接近自然語言,一眼能看出代碼意思。

如果你在Python IDE中輸入import python,則會看到下面一首詩:

美勝于丑,簡勝于繁,這就是Python哲學。

有一本書《effctive python》里面講到蠻多pythonic的寫法,下面列出一些常見的代碼。

1、用列表推導式來取代map、filter

map、filter需要編寫額外的lambda函數(shù),用起來比較復雜,而且效率也不高。

列表推導式則非常簡潔,通過循環(huán)創(chuàng)建列表。

 
 
 
 
  1. # 任務:找到列表中可以被2整除的數(shù),并作二次方運算。 
  2.  
  3. # 非pythonic方法 
  4. a = [1,2,3,4,5,6,7,8,9,10] 
  5. result = map(lambda x: x**2 ,filter(lambda x: x%2==0,a)) 
  6.  
  7. # pythonic方法 
  8. a = [1,2,3,4,5,6,7,8,9,10] 
  9. result = [x**2 for x in a if x%2==0] 

2、用生成器表達式來代替數(shù)據(jù)量較大的列表推導

列表推導式雖然簡潔,但是不適合大數(shù)據(jù)量的生成,因為可能會把內(nèi)存占滿。這時就要用到生成器表達式,它返回生成器,基本不占用內(nèi)存。

 
 
 
 
  1. # 任務:對十億條數(shù)據(jù)進行求平方根操作 
  2.  
  3. # 非pythonic方法 
  4. a = [1,2,3,4,5,6,7,8,9,10] # 假裝這里有十億個數(shù)字 
  5. result = [x**0.5 for x in a] 
  6.  
  7. # pythonic方法 
  8. a = [1,2,3,4,5,6,7,8,9,10]# 假裝這里有十億個數(shù)字 
  9. result = (x**0.5 for x in a) 

3、盡量使用enumerate

enumerate可以把迭代器包裝成生成器,每次遍歷時,會同時列出數(shù)據(jù)和數(shù)據(jù)下標。

 
 
 
 
  1. # 任務:打印列表中每個元素的索引 
  2.  
  3. # 非pythonic方法 
  4. a = ['apple','banana','orange'] 
  5. for i in range(len(a)): 
  6.     print(a[i],':',i) 
  7.  
  8. # pythonic方法 
  9. a = ['apple','banana','orange'] 
  10. for i,j in enumerate(a): 
  11.     print(i,':',j) 

4、使用with方法處理文件

with語句提供一個有效的機制,讓代碼更簡練,同時在異常產(chǎn)生時,清理工作更簡單。

 
 
 
 
  1. # 任務:讀取一個txt文件 
  2.  
  3. # 非pythonic方法 
  4. f = open("some_file.txt") 
  5. try: 
  6.   data = f.read() 
  7.   # 其他文件操作.. 
  8. finally: 
  9.   f.close() 
  10.  
  11. # pythonic方法 
  12. with open("some_file.txt") as f: 
  13.   data = f.read() 
  14.   # 其他文件操作... 

5、使用map函數(shù)

zip() 函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的可迭代對象。

 
 
 
 
  1. # 任務:對比兩個列表相同索引位置元素的大小,輸出較大值 
  2.  
  3. # 非pythonic方法 
  4. a = [1,5,7] 
  5. b = [2,4,6] 
  6. for i in range(len(a)): 
  7.     if a[i] > b[i]: 
  8.         print(a[i]) 
  9.     else: 
  10.         print(b[i]) 
  11.  
  12. # pythonic方法 
  13. a = [1,5,7] 
  14. b = [2,4,6] 
  15. for i,j in zip(a,b): 
  16.     if i > j: 
  17.         print(i) 
  18.     else: 
  19.         print(j) 

6、每行只寫一段語句

 
 
 
 
  1. # 非pythonic方法 
  2. print ('one'); print ('two') 
  3.  
  4. if x == 1: print ('one') 
  5.  
  6. # pythonic方法 
  7. print ('one'); 
  8. print ('two') 
  9.  
  10. if x == 1: 
  11.     print ('one') 

7、縮進

續(xù)行應該與其包裹元素對齊,要么使用圓括號、方括號和花括號內(nèi)的隱式行連接來垂直對齊,要么使用掛行縮進對齊3。

當使用掛行縮進時,應該考慮到第一行不應該有參數(shù),以及使用縮進以區(qū)分自己是續(xù)行。

 
 
 
 
  1. # 非pythonic方法 
  2. # 沒有使用垂直對齊時,禁止把參數(shù)放在第一行 
  3. foo = long_function_name(var_one, var_two, 
  4.     var_three, var_four) 
  5.  
  6. # 當縮進沒有與其他行區(qū)分時,要增加縮進 
  7. def long_function_name( 
  8.     var_one, var_two, var_three, 
  9.     var_four): 
  10.     print(var_one) 
  11.  
  12. # pythonic方法 
  13. # 與左括號對齊 
  14. foo = long_function_name(var_one, var_two, 
  15.                          var_three, var_four) 
  16.  
  17. # 用更多的縮進來與其他行區(qū)分 
  18. def long_function_name( 
  19.         var_one, var_two, var_three, 
  20.         var_four): 
  21.     print(var_one) 
  22.  
  23. # 掛行縮進應該再換一行 
  24. foo = long_function_name( 
  25.     var_one, var_two, 
  26.     var_three, var_four) 

8、 import 導入要分行

 
 
 
 
  1. # 非pythonic方法 
  2. import sys, os 
  3.  
  4. # pythonic方法 
  5. import os 
  6. import sys 
  7. from subprocess import Popen, PIPE 

9、交換兩個變量的值

 
 
 
 
  1. # 非pythonic方法 
  2. a = 'hello' 
  3. b = 'world' 
  4. temp = a 
  5. a = b 
  6. b = temp 
  7. print(a, b) 
  8.  
  9.  
  10. # pythonic方法 
  11. a = 'hello' 
  12. b = 'world' 
  13. a, b = b, a 
  14. print(a, b) 

10、使用join方法拼接字符串

 
 
 
 
  1. # 非pythonic方法 
  2. a = ['w','o','r','l','d'] 
  3. b = '' 
  4. for i in a: 
  5.     b+=i 
  6. print(b) 
  7.  
  8.  
  9. # pythonic方法 
  10. a = ['w','o','r','l','d'] 
  11. b = ''.join(a) 
  12. print(b) 

11、判斷一個值是否為True、空列表、None

 
 
 
 
  1. # 非pythonic方法 
  2. if x == True: 
  3.     pass 
  4. if len(y) == 0: 
  5.     pass 
  6. if z == None: 
  7.     pass 
  8.  
  9.  
  10. # pythonic方法 
  11. if x: 
  12.     pass 
  13. if not y: 
  14.     pass 
  15. if z is None: 
  16.     pass 

12、pythonic風格函數(shù)

  • 命名合理
  • 具有單一功能
  • 包含文檔注釋
  • 返回一個值
  • 函數(shù)和類應該用兩個空行隔開
  • 盡量使用內(nèi)置函數(shù)

補充

最后說下PEP8規(guī)范,PEP8是Python的編碼規(guī)范,其目的在于提高代碼的可讀性。

寫python代碼時,在保證準確的前提下,要盡可能遵守PEP8。

PEP8含義:

常見規(guī)則:


文章名稱:Pythonic風格代碼有什么好處?附12個代碼實例
本文來源:http://uogjgqi.cn/article/ccooijp.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流