不能只执行一次代码

时间:2016-05-02 12:34:59

标签: python

我只想执行一段代码,所以我使用了这样的全局变量:

unopened = True

def make_request:
  #some other code
  global unopened
  if(unopened):
    print "Writing in result file"
    result_file = open("resultFile.txt", "w")
    result_file.write(result)
    result_file.close
    unopened = False
  #some other code

我的问题是代码被执行多次,情况应该不是这样。

我在这里看到了类似的问题Function Not Changing Global Variable,但提出的解决方案对我来说似乎不起作用。

2 个答案:

答案 0 :(得分:1)

您可以尝试通过创建一个可调用类来避免使用全局变量,该类的实例会跟踪它们被调用的次数:

class requester():
    def __init__(self,cap = 1):
        self.cap = cap
        self.called = 0
    def __call__(self):
        if self.called < self.cap :
            #code to be executed at most cap times goes here
            print("requester called")
            self.called += 1

测试如下:

make_request = requester()
for i in range(10):
    make_request()

print("\nNow call three times:\n")

make_request = requester(3)

for i in range(10):
    make_request()

输出:

requester called

Now call three times:

requester called
requester called
requester called

现在,唯一会导致请求多次发生的事情是,如果你创建了requester的多个实例(或者将一个大于1的数字传递给它的构造函数)

关于编辑: this问题的已接受答案包含类似的想法,作为装饰器实现。

答案 1 :(得分:-4)

因为它是对的,对我来说不是很好:

unopened = False
result = "hello"

def make_request():

    global unopened
    unopened = True

    if unopened:
        print ("Writing in result file")
        result_file = open("resultFile.txt", "w")
        result_file.write(result)
        result_file.close  
make_request()
相关问题