python |脚本执行后如何使局部变量成为全局变量

标签 python variables interpreter global local

这是代码。我需要做的是找到一种使 i 全局化的方法,以便在重复执行时 i 的值将递增 1,而不是每次都重置为 0。 main 中的代码来 self 嵌入“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______()

最佳答案

不幸的是,您对问题进行了大量编辑,以至于人们对它的回答显得荒谬。

有多种方法可以创建函数范围内的变量,其值在调用之间保持不变。它们都利用了函数是一流对象这一事实,这意味着它们可以具有属性。例如:

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]

...但我不建议您使用它,除非您了解它为何有效,甚至可能不了解。

关于 python |脚本执行后如何使局部变量成为全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579996/

相关文章:

python - jython 中字符函数参数的最大长度是多少?

Python-如何刷新日志? (django)

java - 在 Java 中显示 volatile 和 usual 变量之间的区别

xcode - 如何在 Swift 中使用比较运算符分配 "bigger than but smaller than"?

macos - 用户级别的 Haskell

python - 更改 Pandas 数据框中一列的值

python - numpy 的复数问题

node.js - MongoDB 将变量名称更新为键 (Node.JS)

language-design - 在实现解释器时,捎带宿主语言的垃圾收集器是好是坏?

haskell - 在 Haskell 中为命令式语言编写解释器