首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法编辑导入的模块字典

无法编辑导入的模块字典
EN

Stack Overflow用户
提问于 2020-07-07 09:22:18
回答 2查看 27关注 0票数 0

在运行python 3.6.3时,我试图编辑在模块中初始化的字典。降低复杂性,我有模块Foo.py

代码语言:javascript
复制
d_1 = {}
def edit(a,b):
    global d_1
    d_1[a] = b

def remove():
    global d_1
    d_1 = {}

和Main.py

代码语言:javascript
复制
from Foo import d_1, edit, remove
import Foo

remove()
edit("Test", 1)

print(d_1)

运行Main.py会打印{},但是如果我共享了remove(),它就会打印{"Test":1}。在这两种情况下,打印Foo.d_1都会打印{"Test":1}

为什么会有所不同,在调用edit之前是否有一种方法可以使remove工作

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-07 09:59:35

原因是您正在remove中创建一个新的remove

如果使用id函数检查d_1 id。你会看到不同之处。

最好使用d_1.clear()而不是d_1 = {}

Foo.d_1正确的原因是remove fn“删除”了另一个dict对象。

(它们在操作不同的dict对象。)

票数 1
EN

Stack Overflow用户

发布于 2020-07-07 09:47:27

最简单的方法是创建一个类来封装所有的方法。

foo.py

代码语言:javascript
复制
class Dictionnary:
    def __init__(self):
        self.d_1 = {}
        
    def edit(self, a, b):
        self.d_1[a] = b
    
    def remove(self):
        self.d_1 = {}
        
    def __str__(self):
        return self.d_1.__str__()

main.py

代码语言:javascript
复制
from foo import Dictionnary

d = Dictionnary()

print("Initialization", d)
d.remove()
print("After remove", d)
d.edit("hello", 1)
print("Edited one time", d)
d.edit("world", ":)")
print("Edited 2 times", d)
d.remove()
print("Removed", d)

输出:

代码语言:javascript
复制
Initialization {}
After remove {}
Edited one time {'hello': 1}
Edited 2 times {'hello': 1, 'world': ':)'}
Removed {}

您还可以使用静态类,这样就不必初始化它并将对象存储在某个地方。

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

https://stackoverflow.com/questions/62772015

复制
相关文章

相似问题

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