簡體   English   中英

外包的 python 模塊不更新全局變量

[英]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.

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