Python | 如何在脚本执行后将局部变量变为全局变量
这是代码。我需要做的是找到一种方法,让 i
变成全局变量,这样每次执行的时候,i
的值就会增加1,而不是每次都重置为0。main
中的代码来自另一个脚本,我把它嵌入到 'main' 中,以便让追踪功能正常工作。这一切都是通过Java来完成的。
from __future__ import nested_scopes
import sys
import time
startTime = time.time()
timeLimit = 5000
def traceit(frame, event, arg):
if event == "line":
elapsedTime = ((time.time() - startTime)*1000)
if elapsedTime > timeLimit:
raise Exception, "The execution time has exceeded the time limit of " + str(timeLimit) + " milliseconds. Script will now terminate"
return traceit
sys.settrace(traceit)
def main______():
try:
i+=1
except NameError:
i=1
main______()
5 个回答
0
下面这句话是用来声明 i
是一个全局变量:
global i
2
要让你的变量变成全局变量,你需要做两件事。
- 在全局范围内定义这个变量,也就是说要把它放在函数外面。
- 在函数里使用 global 这个关键词,这样 Python 就知道这个函数要使用的是更大范围的变量。
举个例子:
i = 0
def inc_i():
global i
i += 1
2
很遗憾,你对这个问题进行了大量修改,以至于人们的回答看起来毫无意义。
有很多方法可以创建一个在函数内部的变量,这个变量的值在每次调用时都不会改变。所有这些方法都利用了函数是“头等公民”的这一特性,也就是说,函数可以拥有属性。例如:
def f(x):
if not hasattr(f, "i"):
setattr(f, "i", 0)
f.i += x
return f.i
还有一种技巧是使用列表作为参数的默认值,然后在调用函数时从不提供这个参数的值:
def f(x, my_list=[0]):
my_list[0] = my_list[0] + x
return my_list[0]
...但我不建议你使用这个方法,除非你明白它为什么有效,甚至即使明白了也不一定要用。