2015-05-28 49 views
0

我在Python 2.x中遇到以下问题:尝试:除了:总是返回

基本上,我在每次迭代时都得到一个变量的当前值和以前的值。在第一次迭代中,prev_var将不会被定义,所以我尝试使用Try Except函数,但由于某些原因,Except ...选项总是在每次迭代时返回,因此prev_var始终等于var。有没有修复/更优雅的方式来做到这一点?

对不起,代码块,我在我的手机上这样做。

def main(): 
    var = 0 

    try: 
     prev_var = prev_var 
    except NameError: 
     prev_var = var 

    #then at the end of main: 
    prev_var = var 
    var += 1 

对不起,我的noobishness。谢谢你的时间。如果有问题,我正在使用Cinema 4d。

+1

有HTTP的读取://www.python- course.eu/global_vs_local_variables.php – NPE

+1

当然它确实,你还没有分配'prev_var' – IanAuld

+0

没有得到你的观点,迭代的东西在哪里? – ZdaR

回答

0

你的名字在函数的local namespaceprev_var,你需要使它global

prev_var = 0 
var = 0 

def main(): 
    global prev_var 
    global var 

    prev_var = var 
    var += 1 

当您指定的函数变量,它是由garbage collector函数结束时捞起。要阻止这种情况的发生,你必须将变量返回到稍后拾取的东西。或者你在函数前面声明变量global namespace

请注意,如果您在global namespace声明它,你不需要使用关键字global的功能,Python会在所有封闭的命名空间进行搜索(包括global)。不过,这是一个很好的做法,并且使代码更清晰。

看着代码,你可能想要对var做同样的事情。我已经将代码缩短为你真正需要的。

在最佳实践方面,你应该避免使用global变量,因为它可以造成大规模头痛为你的代码的发展,更好地传递变量到functionarguments,并将其退回到变量。

0

我想,你的价值分配之外循环,试试这个

如果 == “主要”:

var = 0 

for x in range(0, 5): 

    try: 
     prev_var = prev_var 

    except NameError: 
     prev_var = var 

    finally: 
     prev_var = var 
     print ('prev_var '+str(prev_var)) 
     var += 1