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

三個(gè)提升Python運(yùn)行速度的方法,都很實(shí)用!

開發(fā) 后端
今天總結(jié)三個(gè)提升Python運(yùn)行速度的方法,只從代碼本身考慮,提升運(yùn)行速度并不會從編寫C 擴(kuò)展的代碼、基于JIT的編譯器技術(shù)考慮。

今天總結(jié)三個(gè)提升Python運(yùn)行速度的方法,只從代碼本身考慮,提升運(yùn)行速度并不會從編寫C 擴(kuò)展的代碼、基于JIT的編譯器技術(shù)考慮。

關(guān)于代碼執(zhí)行效率的第一個(gè)方法是減少頻繁的方法訪問,尤其是在多層循環(huán)內(nèi)層、且循環(huán)次數(shù)較多的操作,差距尤為明顯。

  1. # 真是模塊內(nèi)全局變量 
  2. import math 
  3.  
  4. def compute_sqrt(nums): 
  5.     result = [] 
  6.     for n in nums: # 假如nums長度很大 
  7.     # 1. math.sqrt 會被頻繁訪問 
  8.     # 2. result.append 也會被頻繁訪問 
  9.         result.append(math.sqrt(n)) 
  10.     return result 

看到在for循環(huán)里面,涉及2個(gè)頻繁的訪問:

  • math.sqrt 會被頻繁訪問
  • result.append 也會被頻繁訪問

因此第一步做如下更改:直接導(dǎo)入sqrt,而不是導(dǎo)入整個(gè)模塊后再去引用sqrt

  1. # 直接導(dǎo)入sqrt,而不是導(dǎo)入整個(gè)模塊后再去引用sqrt 
  2. from math import sqrt 
  3.  
  4. def compute_sqrt(nums): 
  5.     result = [] 
  6.     for n in nums: # 假如nums長度很大 
  7.     # 1. math.sqrt 會被頻繁訪問 
  8.     # 2. result.append 也會被頻繁訪問 
  9.         result.append(sqrt(n)) 
  10.     return result 

然后再修改result.append,不用頻繁訪問append,使用標(biāo)簽apd指向它就行了:

  1. # 直接導(dǎo)入sqrt,而不是導(dǎo)入整個(gè)模塊后再去引用sqrt 
  2. from math import sqrt 
  3.      
  4. def compute_sqrt(nums): 
  5.     result = [] 
  6.     apd = result.append 
  7.     for n in nums: # 假如nums長度很大 
  8.     # 1. math.sqrt 會被頻繁訪問 
  9.     # 2. result.append 也會被頻繁訪問 
  10.         apd(sqrt(n)) 
  11.     return result 

第二個(gè)方法:查找局部變量的效率是最高的!!!對于頻繁訪問的變量應(yīng)盡可能是局部變量,消除不必要的全局變量訪問。所以對于上面代碼,sqrt還是模塊級別的全局變量,所以修改為:

  1. def compute_sqrt(nums): 
  2.     # 調(diào)整sqrt為局部變量 
  3.     from math import sqrt 
  4.     result = [] 
  5.     apd = result.append 
  6.     for n in nums: # 假如nums長度很大 
  7.     # 1. math.sqrt 會被頻繁訪問 
  8.     # 2. result.append 也會被頻繁訪問 
  9.         apd(sqrt(n)) 
  10.     return result 

第三個(gè)方法:不要做一些不必要的屬性包裝。比如@property必要時(shí)再用,能不用時(shí)就別用。如下對于屬性y做@property裝飾沒有任何意義!只有在y有特定取值,比如只能取大于0的非負(fù)實(shí)數(shù)時(shí)再用此裝飾才有意義。

  1. class A: 
  2.     def __init__(self, x, y): 
  3.         self.x = x 
  4.         self.y = y 
  5.     @property 
  6.     def y(self): 
  7.         return self._y 
  8.     @y.setter  
  9.     def y(self, value): 
  10.         self._y = value 

因此修改為下面這樣,刪去多余的@property包裝

  1. class A: 
  2.     def __init__(self, x, y): 
  3.         self.x = x 
  4.         self.y = y 

以上就是Python代碼提速的3條基本但卻容易被忽略的有價(jià)值方法,希望對你有用。

 

責(zé)任編輯:趙寧寧 來源: 程序員zhenguo
相關(guān)推薦

2009-06-18 12:21:07

javascriptdom

2024-12-17 09:44:55

2011-01-12 11:22:24

微軟認(rèn)證

2018-08-02 16:17:34

Python 開發(fā)編程語言

2013-07-08 11:16:05

Windows 7

2022-02-23 10:54:37

電腦卡頓硬件

2018-03-09 10:15:00

Linux應(yīng)用程序運(yùn)行速度

2020-12-15 06:44:14

程序運(yùn)行速度

2010-03-15 16:34:50

Python字典

2022-05-12 12:55:28

容器Kubernetes運(yùn)行容器

2010-08-24 09:10:14

Linux命令行工具

2009-08-11 09:10:26

Windows 7系統(tǒng)提速

2023-06-26 08:06:39

重構(gòu)代碼冗余

2010-04-12 10:01:43

Windows 7運(yùn)行速度

2016-02-22 09:27:18

2024-09-27 08:35:33

數(shù)組JavaScript性能

2024-11-01 07:30:00

2009-06-26 10:10:00

Hibernate狀態(tài)

2012-10-24 09:40:46

網(wǎng)絡(luò)優(yōu)化系統(tǒng)優(yōu)化

2016-02-15 09:25:00

R語言運(yùn)算效率大數(shù)據(jù)
點(diǎn)贊
收藏

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