2009-10-19 48 views
-3

我在这里有此代码。我可以添加代码的唯一部分是在main______'i = 1'行之后。这个脚本将执行多次,并且会有一些变量(可能不是'i',可能是'xy','var',任何东西),每次增加1。我已经通过在方法之上声明'i'为全局来实现这个工作,但不幸的是,我不能保持这种方式。Python |如何在不将其初始化为全局变量的情况下将此变量设为全局

有没有一种方法可以使'i'作为上述参数中的全局变量?

def main______(): 
    try: 
     i+=1 
    except NameError: 
     i=1 
main______() 
+3

“我可以添加代码的唯一部分是main_____的‘I = 1’行后”真的吗?为什么?这完全没有意义。 – 2009-10-19 19:59:31

+0

你为什么要调用函数main ______()?这恰恰是6个下划线太多。这个问题完全缺乏什么必须是很多很奇怪的背景。当你遇到具体问题时,不要问抽象的问题。 – 2009-10-19 20:05:21

+0

我试图简化一个复杂的问题。该方法的名称是无关紧要的。 – frank 2009-10-19 20:06:25

回答

1

如果要使用全局变量,则必须将其声明为全局变量。那有什么问题?

如果你需要存储调用之间的状态,你应该使用类

>>> class F(): 
...  def __init__(self): 
...   self.i=0 
...  def __call__(self): 
...   print self.i 
...   self.i+=1 
... 
>>> f=F() 
>>> f() 
0 
>>> f() 
1 
>>> f() 
2 
+0

+1第一个。第二个应该进入粉碎机。 – 2009-10-19 22:47:49

+0

-1:哈克的方式危险地接近错误。使用可变对象作为默认值是非常危险的,因此在这里显示它是等待发生的麻烦。即使它是正确的。这仍然是一件坏事。 – 2009-10-20 01:27:59

+0

由于受欢迎的需求,我已经粉碎了哈克的方式。 – 2009-10-20 01:55:14