导入的变量更新未反映在父模块中

Posted

技术标签:

【中文标题】导入的变量更新未反映在父模块中【英文标题】:imported variable update is not reflecting in the parent module 【发布时间】:2020-12-26 12:42:13 【问题描述】:

我有两个模块,主要和更新。

在 main 中,我声明了一个引用字典和每个值的列表。在更新中我更新了年龄,但我没有看到更新再次反映在主模块中。

main module

candidates = 'goutham': 'Age': 30, 'teja':'Age': 27

for s in candidates:
    portfolio[s] = [0,0] # some value which i use for other calculations

update module
from main import *

portfolio['goutham'][0] = 32

现在当我回到主页面并打印投资组合['goutham']。它仍然将值显示为 [0,0]

【问题讨论】:

你想要什么样的数据结构? candidates 是字典,portfolio 应该有什么作为键?然后,您将[0, 0] 分配给portfolio 中的一个条目,但稍后您只分配了一个标量32。首先决定你的数据结构。您的代码可能不起作用,因为投资组合的键是 candidates 字典条目,而稍后您尝试通过简单的字符串 goutham 访问 portfolio 你执行的是哪个脚本? @Maciek - 我实际上已经以一种很小的方式表达了我的问题。我的程序的实际目的是用于算法交易,我有一个名为 trd_portfolio 的股票列表,这是一个包含任何特定股票详细信息的字典字典。然后我有某些数据框,例如 Profit_calculation、ohlc 等。但是为了使用我获得的股票报价数据来获得这些数据框,我创建了每个表的列表,其中包含初始字典中的各个值作为键。简而言之,对于字典中的每个条目,都会有一个列表,在特定条件下,该列表将添加到 Datafra 好吧,无论如何,看看我的回答,它实际上修改了数据(这是你原来的问题)。 【参考方案1】:

例如当您运行我添加的run.py 时,这应该可以打印'goutham': [32, 0], 'teja': [0, 0]

main.py

candidates = 'goutham': 'Age': 30, 'teja':'Age': 27
portfolio = candidate:[0, 0] for candidate in candidates.keys()

update.py

from main import *
portfolio['goutham'][0] = 32

运行.py

import update
from main import *
print(portfolio)

作为旁注:现在您的模块中有在导入模块时正在执行的模块。如果这是您的主要逻辑,请考虑将其放入某个 main() 函数中,而不是依赖于导入时的隐式执行。

【讨论】:

以上是关于导入的变量更新未反映在父模块中的主要内容,如果未能解决你的问题,请参考以下文章

NSMutableDictionary 中的更改未反映在父 NSDictionary 中

如何修复 PyDev“导入未定义变量”错误?

未捕获的错误:对 JavaScript 使用动态导入时找不到模块

Vue JS NPM 模块导入组件

打字稿导入模块作为变量不起作用

多处理全局变量更新未返回给父级