Order of execution in Python methods
本问题已经有最佳答案,请猛点这里访问。
我试过看几个不同的例子,但我不太确定为什么这行不通。假设我有这样的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def loadVariable(): global count count = 0 def loadDictionary(): location = 'some location' global myDict myDict = pickle.load(open(location, 'rb')) def main(): loadVariable() loadDictionary() for item in myDict: if item.startswith("rt"): count += 1 item = item[3:] if __name__ == '__main__': main() |
在我看来,if语句是执行的,它启动了main()方法。然后,加载全局变量,加载字典,执行for循环。
但是,当我运行代码时,我被告知局部变量计数在赋值之前被引用。为什么会这样?
编辑(解释我在评论中写的一些内容):
这不起作用(尽管我认为这是因为全局在这里使用错误):
1 2 3 4 5 6 7 8 | global count def loadVariables() count = 0 def main(): loadVariables() rest of code etc |
这也不起作用:
1 2 3 4 5 6 7 | def loadVariables() count = 0 def main(): global count loadVariables() rest of code etc |
到目前为止,我让它工作的唯一方法是使用上面提供的链接,它将计数视为一个列表,如下所示:
1 2 3 4 5 6 7 8 | def loadVariables(): global count count = [0] def main(): loadVariables(): rest of code etc count[0] += 1 |
问题是,您没有在
所以,最基本的解决方法就是在
下面是一个简单的例子,说明
1 2 3 4 5 6 7 8 9 10 11 12 13 | global_var = 0 def updater(): global global_var global_var += 1 def stuff(x): updater() return global_var + x if __name__ == '__main__': stuff(2) # returns 3 |