首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python3 -使用更新的全局变量值,而不是旧值。

python3 -使用更新的全局变量值,而不是旧值。
EN

Stack Overflow用户
提问于 2018-06-25 14:27:52
回答 3查看 765关注 0票数 1

我对python很陌生,我试图在导入的模块中更新一个变量,比如x,然后尝试在其他变量中使用更新的变量x,比如y,但是y使用旧的x值而不是新的值。请帮助提供一些指示,以使它的工作!

我的意图是使用py文件列出我可以在其他py文件中使用的所有全局变量。我可以更新全局变量并使用它,但不确定如何在其他变量中使用更新的全局变量。

样本代码:

a.py:

代码语言:javascript
运行
复制
var1 = 0
var2 = var1 + 1

b.py:

代码语言:javascript
运行
复制
import a

def update_var():
    a.var1 = 10
    print("Updated var1 is {}".format(a.var1))
    print("var2 is {}".format(a.var2))

if __name__ == "__main__":
    update_var()

输出:

代码语言:javascript
运行
复制
Updated var1 is 10
var2 is 1

预期输出:

由于我将var1更新为10,所以我希望在var2中使用更新后的值。

代码语言:javascript
运行
复制
Updated var1 is 10
var2 is 11
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-27 06:58:12

基于@GPhilo的输入和我个人的经验,我想出了下面的工作解决方案,猜测解决方案2更多的是pythonic。

解决方案1:

a.py:

代码语言:javascript
运行
复制
class Globals:

def __init__(self, value):
    self.var1 = value
    self.var2 = self.var1 + 1

b.py:

代码语言:javascript
运行
复制
from a import Globals

def update_var():
    globals_instance = Globals(10)
    print("Updated var1 is {}".format(globals_instance.var1))
    print("var2 is {}".format(globals_instance.var2))


if __name__ == "__main__":
    update_var()

输出:

代码语言:javascript
运行
复制
Updated var1 is 10
var2 is 11

解决方案2:

更改a.py的实现如下“

a.py:

代码语言:javascript
运行
复制
class Globals:

    def __init__(self, value):
        self._var1 = value
        self.var2 = self._var1 + 1


    @property
    def var1(self):
        return self._var1


    @var1.setter
    def var1(self, value):
        self._var1 = value
票数 0
EN

Stack Overflow用户

发布于 2018-06-25 14:30:45

Python不是那样工作的。当您import一个模块时,模块中的代码将被执行。在您的示例中,这意味着定义了两个变量:a.var1与值0a.var2与值1。如果然后修改a.var1,您不会影响a.var2,它的值是在导入模块时定义的,除非您显式地修改它,否则它不会改变。

票数 3
EN

Stack Overflow用户

发布于 2018-06-25 14:35:15

这是因为var2在导入时只初始化一次。解决这个问题的方法是编写一个getter或和update函数。

一个可能的getter函数是:

a.py

代码语言:javascript
运行
复制
var1 = 0
var2 = var1 + 1

def getVar2():
    return var1 + 1

b.py:

代码语言:javascript
运行
复制
import a

def update_var():
    a.var1 = 10
    print("Updated var1 is {}".format(a.var1))
    print("var2 is {}".format(a.getVar2()))

if __name__ == "__main__":
    update_var()

一个可能的更新功能是:

a.py

代码语言:javascript
运行
复制
var1 = 0
var2 = var1 + 1

def updateVar2():
    var2 = var1+1

b.py:

代码语言:javascript
运行
复制
import a

def update_var():
    a.var1 = 10
    a.updateVar2()
    print("Updated var1 is {}".format(a.var1))
    print("var2 is {}".format(a.var2()))

if __name__ == "__main__":
    update_var()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51025860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档