自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我總結(jié)了十個(gè)Python性能調(diào)優(yōu)小技巧,你知道幾個(gè)?

開發(fā) 后端
我總結(jié)了10個(gè)Python性能調(diào)優(yōu)小技巧,一起來看看都有哪些吧!

[[435952]]

1 多多使用列表生成式

替換下面代碼:

  1. cube_numbers = [] 
  2.   for n in range(0,10): 
  3.     if n % 2 == 1: 
  4.       cube_numbers.append(n**3) 

為列表生成式寫法: 

  1. cube_numbers = [n**3 for n in range(1,10) if n%2 == 1] 

2 內(nèi)置函數(shù)

盡可能多使用下面這些內(nèi)置函數(shù): 

我總結(jié)了10個(gè)Python性能調(diào)優(yōu)小技巧,你知道幾個(gè)? 

3 盡可能使用生成器

單機(jī)處理較大數(shù)據(jù)量時(shí),生成器往往很有用,因?yàn)樗欠中∑鸫巫x取,最大程度節(jié)省內(nèi)存,如下網(wǎng)頁爬取時(shí)使用yield。 

  1. import requests 
  2. import re 
  3.  
  4. def get_pages(link): 
  5.   pages_to_visit = [] 
  6.   pages_to_visit.append(link) 
  7.   pattern = re.compile('https?'
  8.   while pages_to_visit: 
  9.     current_page = pages_to_visit.pop(0) 
  10.     page = requests.get(current_page) 
  11.     for url in re.findall('<a href="([^"]+)">', str(page.content)): 
  12.       if url[0] == '/'
  13.         url = current_page + url[1:] 
  14.       if pattern.match(url): 
  15.         pages_to_visit.append(url) 
  16.     # yield 
  17.     yield current_page 
  18. webpage = get_pages('http://www.example.com'
  19. for result in webpage: 
  20.   print(result) 

4 判斷成員所屬關(guān)系最快的方法使用 in 

  1. for name in member_list: 
  2.   print('{} is a member'.format(name)) 

5 使用集合求交集

替換下面代碼: 

  1. a = [1,2,3,4,5] 
  2. b = [2,3,4,5,6] 
  3.  
  4. overlaps = [] 
  5. for x in a: 
  6.   for y in b: 
  7.     if x==y: 
  8.       overlaps.append(x) 
  9.  
  10. print(overlaps) 

修改為set和求交集: 

  1. a = [1,2,3,4,5] 
  2. b = [2,3,4,5,6] 
  3.  
  4. overlaps = set(a) & set(b) 
  5.  
  6. print(overlaps) 

6 多重賦值

Python支持多重賦值的風(fēng)格,要多多使用。 

  1. first_name, last_name, city = "Kevin""Cunningham""Brighton" 

7 盡量少用全局變量

Python查找最快、效率最高的是局部變量,查找全局變量相對(duì)變慢很多,因此多用局部變量,少用全局變量。

8 高效的itertools模塊

itertools模塊支持多個(gè)迭代器的操作,提供最節(jié)省內(nèi)存的寫法,因此要多多使用,如下求三個(gè)元素的全排列: 

  1. import itertools 
  2. iter = itertools.permutations(["Alice""Bob""Carol"]) 
  3. list(iter) 

9 lru_cache 緩存

位于functools模塊的lru_cache裝飾器提供了緩存功能,如下結(jié)合它和遞歸求解斐波那契數(shù)列第n: 

  1. import functools 
  2.  
  3. @functools.lru_cache(maxsize=128) 
  4. def fibonacci(n): 
  5.   if n == 0: 
  6.     return 0 
  7.   elif n == 1: 
  8.     return 1 
  9.   return fibonacci(n - 1) + fibonacci(n-2) 

因此,下面的遞歸寫法非常低效,存在重復(fù)求解多個(gè)子問題的情況: 

  1. def fibonacci(n): 
  2.   if n == 0: # There is no 0'th number 
  3.     return 0 
  4.   elif n == 1: # We define the first number as 1 
  5.     return 1 
  6.   return fibonacci(n - 1) + fibonacci(n-2) 

10 內(nèi)置函數(shù)、key和itemgetter

上面提到盡量多使用內(nèi)置函數(shù),如下對(duì)列表排序使用key,operator.itemgetter: 

  1. import operator 
  2. my_list = [("Josh""Grobin""Singer"), ("Marco""Polo""General"), ("Ada""Lovelace""Scientist")] 
  3. my_list.sort(key=operator.itemgetter(0)) 
  4. my_list 

 

 

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2024-11-11 08:11:39

2023-12-15 10:42:05

2024-09-30 10:05:00

2024-01-30 00:40:10

2022-03-30 15:53:18

標(biāo)簽頁用戶設(shè)計(jì)

2021-05-12 09:00:00

WebReactJavaScript

2023-10-30 18:00:00

Docker命令開源平臺(tái)

2023-08-29 07:52:09

CSS庫網(wǎng)絡(luò)動(dòng)畫

2023-04-10 11:25:29

工程交流DX

2023-02-07 08:00:00

MySQL數(shù)據(jù)庫技巧

2024-11-15 10:45:56

2023-03-31 08:10:50

2020-03-25 10:27:59

Python語言

2021-02-16 16:43:21

工具性能調(diào)優(yōu)

2021-02-05 16:20:54

代碼Linux技巧

2010-09-25 13:05:07

JVM參數(shù)

2020-02-23 23:29:07

Python編程開發(fā)

2010-09-25 15:52:27

JVM內(nèi)存JVM

2021-09-15 09:20:37

Python函數(shù)代碼

2013-09-29 13:36:07

虛擬SAN
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)