[英]Outsourced python module doesn't update globals
我在 class 中添加了一些全局變量。 以下工作正常:
class AssignGlobal():
@staticmethod
def assign():
code = 'xyz'
index = 2
globals()[code] = index
AssignGlobal.assign()
xyz ## returns 2
但是,如果我將 AssignGlobal class 外包出去,全局變量就不會再更新了。 我實際上不確定這個導入到底做了什么。 為什么它不更新我的全局變量?
from backtester.outsourced import AssignGlobal as ag
## assume I created a file outsourced.py in the backtested subdirectory from where I am. It contains the AssignGlobal class above
ag.assign()
xyz
NameError Traceback (most recent call last)
<ipython-input-3-8714e0ef31ed> in <module>
----> 1 xyz
NameError: name 'xyz' is not defined
Python 全局變量的作用域本質上是定義它們的模塊。
當您在模塊內聲明全局變量時,它們會被添加到模塊__dict__
中,並且可以作為屬性從另一個模塊訪問。
在您的情況下,您要導入outsourced
模塊的模塊在其__dict__
中不會有xyz
,而是在您調用AssignGlobal.assign()
之后, outsourced
模塊 object 將設置一個屬性xyz
。
以下代碼將 output 2
:
import outsourced
outsourced.AssignGlobal.assign()
print(outsourced.xyz)
原因是,當調用assign
時, xyz
是在outsourced
模塊的 scope 中定義的,而不是在導入的地方,因為全局變量不共享。
要獲取xyz
值,您需要從outsourced
模塊 object 中將其作為屬性獲取。
文檔展示了如何跨模塊共享變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.