簡體   English   中英

Python跨模塊變量和導入

[英]Python cross module variables and imports

我看到還有其他與跨模塊變量有關的問題,但是它們並不能真正回答我的問題。

我有一個應用程序,該應用程序已分為3個模塊和1個主要應用程序,主要是為了易於閱讀和可維護性。

這些模塊中的2個具有帶變量的線程,這些變量需要與其他模塊和其他模塊線程一起修改。

盡管可以從主代碼中修改模塊的變量,但是除非將每個模塊都導入到每個其他模塊中,否則我似乎無法從另一個模塊中修改一個模塊的變量。

下面的示例將a&b導入main和模塊a中,需要訪問模塊b中的變量:

main
 module a
   var a
 module b
   var a

main
 a.a = 1
 b.a = 2

module a
 b.a = 3

module b
 a.a = 0

無需將模塊a導入模塊b和將模塊b導入模塊a,是否可以通過主程序全局實現?

如果確實必須將a和b導入main,然后將a導入b和b到a,那么在內存和資源使用/速度等方面有什么含義?

我嘗試了@abarnert的建議:

#moda
vara = 10

#modb
print(str(vara))

#main
import moda
from moda import vara
import modb

但是我得到“未定義名稱錯誤變量”

如果要能夠從其他模塊修改模塊級變量,則可以,則需要導入其他模塊。 我會問為什么你需要這樣做。 也許您應該將代碼分成類而不是單獨的模塊。

例如,您可以選擇將兩個模塊都需要修改的變量封裝在一個單獨的類中,然后將該類的單個實例傳遞給需要它的所有類(或模塊,但您應該使用類)。

有關循環導入的更多信息,請參見Python中的循環(或循環)導入。

如果將模塊中的代碼定義為類,並且主程序創建這些類的實例,則主程序可以將一個模塊類的實例傳遞給另一模塊類,並且對該實例的更改將在所有地方反映出來。 無需將a或b相互導入,因為它們只是相互引用。

如果確實必須將a和b導入main,然后將a導入b和b到a,那么在內存和資源使用/速度等方面有什么含義?

內存絕對沒有-每個導入a模塊都將引用與a模塊對象完全相同的引用。 您要做的只是增加引用計數,而不是創建新對象。

為了提高速度,發現嘗試導入一個已經存在的模塊的時間幾乎沒有(它只是在字典中查找模塊名稱)。 稍慢訪問aa ,而不是只訪問a 但這很少是一個問題。 如果是的話,幾乎可以肯定的是,您將要將該值復制到任何函數要反復訪問的本地變量中,此時,它來自哪個全局變量都無關緊要。

無需將模塊a導入模塊b和將模塊b導入模塊a,是否可以通過主程序全局實現?

當然。 您所需要做的就是import( from a import a import aa as aa from a import aimport aa as aa或其他方式import aa as aa )或將模塊a的變量復制到main

注意,只是為每個值取一個新名字; 它沒有引用變量。 在Python中沒有這樣的東西作為對變量的引用。

如果變量持有常量,或者持有您修改的可變值,則此方法有效。 如果變量是要重新綁定到新值的名稱,則它沒有任何用處。 (如果確實需要這樣做,則只需將值包裝在可變的內容中即可,例如,將每個變量變成一個1項列表,這樣就可以重新綁定a[0]而不是a ,這意味着其他任何引用到a可以看到您的新a[0]值)。

如果您堅持“真正的全球性”,那也不是不可能。 有關詳細信息,請參見builtins 但是您幾乎可以肯定不希望這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM