这是代码。我需要做的是找到一种方法使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______()
答案 0 :(得分:2)
不幸的是,你已经如此严重地编辑了这个问题,以至于人们对它的回答似乎毫无意义。
有许多方法可以在函数中创建范围内的变量,其值在调用之间保持不变。所有这些都利用了函数是第一类对象的事实,这意味着它们可以具有属性。例如:
def f(x):
if not hasattr(f, "i"):
setattr(f, "i", 0)
f.i += x
return f.i
还有一个hack使用列表作为参数的默认值,然后在调用函数时从不为参数提供值:
def f(x, my_list=[0]):
my_list[0] = my_list[0] + x
return my_list[0]
...但我不建议使用它,除非你理解为什么它有效,甚至可能不是。
答案 1 :(得分:2)
您需要做两件事来使变量成为全局变量。
示例:
i = 0
def inc_i():
global i
i += 1
答案 2 :(得分:0)
在函数或方法中未定义的变量,但在Python中的模块级别上,与Python中的全局变量一样接近。您可以通过
从其他脚本访问该文件from scriptA import variablename
这将执行脚本,并允许您访问变量。
答案 3 :(得分:0)
以下语句将i
声明为全局变量:
global i
答案 4 :(得分:0)
你的陈述“嵌入'main'以使跟踪功能起作用”是非常模糊的,但听起来你想要的是:
对于这种事情,请使用“exec”。一个例子:
import sys
import time
def timeout(frame,event,arg):
if event == 'line':
elapsed = (time.time()-start) * 1000
code = """
try:
i += 1
except NameError:
i = 1
print 'current i:',i
"""
globals = {}
for ii in range(3):
start = time.time()
sys.settrace(timeout)
exec code in globals
print 'final i:',globals['i']