或者說,其他的比局部變數差多少?
有什麼大不了的?
有些文章建議Python程式設計師如果會經常使用局部變量,即使只是引用但不改變。
例如,以下是「Making Python Programs Blazing Fast」中的兩句話:
「實際上,甚至在函數中的局部變數(最快)、類別級屬性(例如self.name - 較慢)和全域(例如time.time 等導入函數)之間,查找速度也存在差異(最慢) 」。
「不要存取屬性
另一個可能會減慢程式速度的事情是存取物件屬性時使用的點運算子 (.)。此運算子使用 getattribute 觸發字典查找,這會在程式碼中產生額外的開銷。 “
而且,這些並不是唯一的可能性。之間的差異如何:
我透過在循環中使用所有這些進行 1,000,000 次迭代進行測試,但其中每次迭代的工作量最少。除了用於測試類別外函數的函數屬性的函數之外,這些函數都是類別的方法。
典型的函數有以下形式:
def testINSA(self): s=0 for i in range(10000000): s+=self.INSA # what is after the = differs in each function. return s
所有程式碼都在這篇文章的底部。
| | | | Relative | | Where | Time | Rate | Performance | | LV Local Variable | 1.92 | 0.5208 | 100% | | GV Global Variable | 1.99 | 0.5020 | 96% | | ISA Instance Slotted Attribute | 2.09 | 0.4789 | 92% | | CA Class Attribute | 3.12 | 0.3204 | 62% | | INSA Instance Non-Slotted Attribute | 3.28 | 0.3051 | 59% | | FA Function Attribute | 3.49 | 0.2865 | 55% | | MA Method Attribute | 6.29 | 0.1589 | 31% |
說明:
比較效能時,請始終比較(成就/資源),例如每加侖英里數或每秒計算數,而不是每公里升數或每計算秒數。
是的,局部變數是最快的。
不同類型變數的表現分為三組。
令人驚訝的是,與常識相比,全域變數是第二好的,甚至比類別中的開槽實例屬性更好。另一個令人驚訝的是方法屬性是最差的。
def testINSA(self): s=0 for i in range(10000000): s+=self.INSA # what is after the = differs in each function. return s
以上是python 局部變數比全域變數、屬性或槽好多少?的詳細內容。更多資訊請關注PHP中文網其他相關文章!