我想了解以下模塊導入情況下,內存利用率: 要有一個名爲myfile.py
含Python中「導入」和「從導入」場景的內存利用率是多少?
//myfile.py
var = 'Hello World'
案例1模塊:
import myfile
myfile.title
案例2:
from my file import title
title
謝謝!
我想了解以下模塊導入情況下,內存利用率: 要有一個名爲myfile.py
含Python中「導入」和「從導入」場景的內存利用率是多少?
//myfile.py
var = 'Hello World'
案例1模塊:
import myfile
myfile.title
案例2:
from my file import title
title
謝謝!
它本質上是相同的。在這兩種情況下,無論您使用哪個部件,都需要加載整個myfile
模塊。這兩個版本都不會創建不必要的副本,因此如果myfile.title
是巨大的,那麼這兩個版本都不會將您的內存填滿myfile.title
的副本。
導入模塊不會浪費任何東西;模塊始終完全導入(映射到myfile.modules
),所以無論您使用的是import myfile
還是from myfile import title
都沒有任何優勢。
兩個語句之間的唯一區別是什麼名字爲界; import myfile
結合名稱myfile
到模塊(因此myfile -> myfile.modules['myfile']
),而從myfile import title
結合不同的名字,標題,在包含在該模塊(因此title -> myfile.modules['myfile'].title
)內的屬性直指向。 myfile
模塊的其餘部分仍然存在,無論您是否使用其他模塊。
還有兩種方法之間沒有性能差異。是的,myfile.title
必須查找兩件事;它必須在您的全局名稱空間(查找模塊)中查找myfile
,然後查找屬性標題。是的,通過使用from myfile import title
,您可以跳過屬性查找,因爲您已經直接引用了該屬性。但是導入語句仍然需要這樣做,導入時它會查找相同的屬性,並且您只需要使用標題一次。如果你不得不在循環中使用標題數千次,它可能會有所作爲,但在這種特定情況下,它確實不會。
一種或另一種則之間的選擇,應根據編碼風格代替。
在一個大的模塊,我肯定要用import myfile
;代碼文檔很重要,並且在大型模塊中的某個地方使用myfile.title
可以使您所指的內容更加清晰,而不僅僅是標題。
如果使用標題的唯一地方是在「主要」塊調用main()
功能,通過各種手段使用from myfile import title
如果你感覺如何快樂:
if __name__ == '__main__':
from myfile import title
main(title)
我仍然會使用import myfile
我自己。所有的東西都是平等的(而且它們的性能和用來寫它的字符數量),這對我來說更容易。
如果你完全導入別的東西的話,或許性能發揮了作用。但是,只有在模塊中多次使用特定名稱,例如在關鍵循環中。但是,然後創建一個本地名稱(功能內)將更快:
import myfile
def title():
localname = somemodule.somefunctionorother
while test:
# huge, critical loop
foo = localname(bar)
因此,這兩種情況下複製整個模塊到導入的文件? – pk10
@ user2961121:兩種情況都不能複製。無論有多少模塊在單個程序中導入'myfile',只有一個'myfile'模塊將被加載以供所有模塊共享。 – user2357112
好吧,那麼用屬性名稱來限定模塊名稱以獲取它(情況1)並直接取回它(情況2)會有什麼性能影響? 對不起,如果問題很蠢,我是一個新手:( – pk10