我只想执行一段代码,所以我使用了这样的全局变量:
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,但提出的解决方案对我来说似乎不起作用。
答案 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()