Python | 如何在脚本执行后将局部变量变为全局变量

1 投票
5 回答
11058 浏览
提问于 2025-04-15 15:07

这是代码。我需要做的是找到一种方法,让 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

要让你的变量变成全局变量,你需要做两件事。

  1. 在全局范围内定义这个变量,也就是说要把它放在函数外面。
  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]

...但我不建议你使用这个方法,除非你明白它为什么有效,甚至即使明白了也不一定要用。

撰写回答