我有以下结构:
app/
test1.py
test/
__init__.py
test2.py
我在test2.py
中导入test1.py
并使用test2.py
代码如下:
test1.py:
import test.test2 as T
T.hello()
...
T.hello1()
test2.py:
d = {}
def hello():
print('hi')
global d
d['1'] = 1
def hello1():
print('hi1')
global d
print(d) # prints{'1': 1}
test1.py
会致电hello
并在一段时间后致电hello1
。我想填充dict
中的d
hello
并在hello1
中使用它。使用global
可以正常工作但是更好的方法是这样做,因为我想避免使用globals
。我不想将d
从hello
传递到caller
中的test1
,然后从那里传回hello1
。
我可以做些什么来避免globals
。我正在使用python 3.5
。
答案 0 :(得分:3)
你可以使用一个类:
class Whatever(object):
def __init__(self):
self.d = {}
def hello(self):
print('hi')
self.d['1'] = 1
def hello1(self):
print('hi1')
print(self.d)
_Someinstance = Whatever()
hello = _Someinstance.hello
hello1 = _Someinstance.hello1
您可以在任何需要的位置创建和使用实例,而不是最后三行。这些只是为了使它(几乎)像你的原始行为一样。
请注意,函数也是对象,因此您只需将变量赋值给hello
函数:
def hello():
print('hi')
hello.d['1'] = 1
def hello1():
print('hi1')
print(hello.d) # prints{'1': 1}
hello.d = {}