在运行python 3.6.3时,我试图编辑在模块中初始化的字典。降低复杂性,我有模块Foo.py
d_1 = {}
def edit(a,b):
global d_1
d_1[a] = b
def remove():
global d_1
d_1 = {}和Main.py
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工作
发布于 2020-07-07 09:59:35
原因是您正在remove中创建一个新的remove。
如果使用id函数检查d_1 id。你会看到不同之处。
最好使用d_1.clear()而不是d_1 = {}。
Foo.d_1正确的原因是remove fn“删除”了另一个dict对象。
(它们在操作不同的dict对象。)
发布于 2020-07-07 09:47:27
最简单的方法是创建一个类来封装所有的方法。
foo.py
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
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)输出:
Initialization {}
After remove {}
Edited one time {'hello': 1}
Edited 2 times {'hello': 1, 'world': ':)'}
Removed {}您还可以使用静态类,这样就不必初始化它并将对象存储在某个地方。
https://stackoverflow.com/questions/62772015
复制相似问题