成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

[[382298]]

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

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

在Java里這樣的:

 

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

嘗試用python來寫循環,則非常簡潔易懂:

 

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

想要更加pythonic,用生成器表達式來寫循環:

 

  1. (item.some_attribute for item in items) 

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

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

 

 

 

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

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

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

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

列表推導式則非常簡潔,通過循環創建列表。

 

  1. # 任務:找到列表中可以被2整除的數,并作二次方運算。 
  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、用生成器表達式來代替數據量較大的列表推導

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

 

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

3、盡量使用enumerate

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

 

  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語句提供一個有效的機制,讓代碼更簡練,同時在異常產生時,清理工作更簡單。

 

  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函數

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

 

  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、縮進

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

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

 

  1. # 非pythonic方法 
  2. # 沒有使用垂直對齊時,禁止把參數放在第一行 
  3. foo = long_function_name(var_one, var_two, 
  4.     var_three, var_four) 
  5.  
  6. # 當縮進沒有與其他行區分時,要增加縮進 
  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. # 用更多的縮進來與其他行區分 
  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風格函數

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

補充

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

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

PEP8含義:

 

常見規則:


 

 

責任編輯:華軒 來源: Python大數據分析
相關推薦

2023-09-26 12:04:15

重構技巧Pythonic

2023-01-11 11:35:40

重構PythonPythonic

2023-02-06 12:00:00

重構PythonPythonic

2024-11-12 12:52:39

Python代碼函數

2020-10-25 19:58:04

Pythonic代碼語言

2013-06-06 10:10:59

項目項目代碼代碼風格

2017-07-10 14:58:23

JavaScript代碼風格寫作準則

2025-01-06 08:00:00

Python代碼編程

2025-01-26 08:30:00

Python代碼編程

2018-01-02 16:30:27

Python爬蟲微博移動端

2017-09-08 12:15:54

Python代碼Pythonic

2021-08-24 13:05:25

TypeScript代碼前端

2024-10-08 05:00:00

PEP 8編碼Python

2013-03-19 09:40:44

CookiesCookies跟蹤個人隱私

2019-04-29 08:31:25

PythonPandas數據

2012-07-27 10:30:12

重構

2010-07-28 15:42:44

Flex

2025-01-14 00:01:01

2022-03-10 08:01:06

CSS技巧選擇器

2022-11-24 10:34:05

CSS前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 夜夜草 | 电影91久久久| av片网站| 在线观看免费av网站 | 成人影视网址 | 久久精品视频在线免费观看 | 一区二区三区精品视频 | 精品久久久精品 | 亚洲性人人天天夜夜摸 | 中文字幕视频免费 | 欧美在线二区 | 不卡在线视频 | 女生羞羞网站 | 亚洲成人一区二区 | 白浆在线 | 日韩另类视频 | 国产亚洲精品久久久优势 | 日本久久精品 | 欧美激情视频一区二区三区免费 | 欧美一二区 | 欧美一级欧美一级在线播放 | 亚洲网在线 | 巨大荫蒂视频欧美另类大 | 亚洲高清成人在线 | 亚洲人人 | 天天干天天色 | 国产精品揄拍一区二区 | 台湾a级理论片在线观看 | 一级黄色片日本 | 亚洲高清视频一区二区 | 中文字幕一区二区三区不卡 | 亚洲视频免费观看 | 精品精品 | 成人午夜免费视频 | 精品免费国产一区二区三区四区 | 成人在线a | 亚洲精品久久久一区二区三区 | 久久aⅴ乱码一区二区三区 91综合网 | 日韩一区二区三区在线视频 | 精品国产免费一区二区三区演员表 | 在线第一页 |