假設我有以下課程:
import numpy as np
class ToStringify():
DEMARCATION = "::::"
def __init__(self):
self.first_np_array = np.random.rand(30, 30, 30)
self.second_np_array = np.random.rand(30, 30, 30)
self.some_string = "string"
self.some_int = 5
def to_str_format(self) -> str:
entries = [
self.first_np_array, self.second_np_array, self.some_string, self.some_int
]
return f"{self.DEMARCATION}".join([str(entry) for entry in entries])
我已經對我的代碼進行了概要分析,它to_str_format占用了我整個程式運行時間的 25% 左右。不幸的是,to_str_format需要輸出一個字串(無論我選擇什么分界),該字串將在某些我無法更改的管道中進一步消耗。我正在做一個串列理解來嘗試加快速度,但除此之外,我不確定我還能做什么(如果有的話)。如果有任何改變,我正在使用 python 3.9
uj5u.com熱心網友回復:
您必須再次分析以驗證這些建議中的任何一個是否有足夠大的影響,但快速的非正式測驗顯示可能有 10-15% 的改進,因此它可能會有所幫助。
首先,這個:
join([str(entry) for entry in entries])
該[ ]是沒有必要的。join()可以使用生成器運算式,因此串列推導式只會增加創建(可能很大)物件的開銷。所以:
join(str(entry) for entry in entries)
可能會快一點(似乎大約 5%)。甚至比這更快(大約 10%)將是:
join(map(str, entries))
其次是f-string。如果您根本不修改或更改 的表示DEMARCATION,這就足夠了:
self.DEMARCATION.join(....)
這避免了處理 f 字串的開銷。總之,這可能是最有效的形式:
return self.DEMARCATION.join(map(str, entries))
另一件事是entries串列。如果to_str_format()被多次呼叫,并且entries從不改變(也就是說,它始終是這 4 個物件的串列),那么最好在其他地方設定一次(例如實體或類屬性)。將其創建為元組而不是串列可能會稍微快一些。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/337498.html
下一篇:如何從字串中洗掉最后一個字符
