在模块函数调用之间存储状态

时间:2017-08-08 15:17:32

标签: python python-3.x function global-variables

我有以下结构:

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。我不想将dhello传递到caller中的test1,然后从那里传回hello1

我可以做些什么来避免globals。我正在使用python 3.5

1 个答案:

答案 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 = {}