在Python中通过参数函数更新外部变量

时间:2015-03-11 19:41:52

标签: python function variables updates

我有一个根据所选参数生成值的页面,该函数应该更新一个也由参数传递的外部变量。但它不起作用。

变量以相同的id输入,但在生成值并传递给此变量时,它不会在外部更改。

这是cógidos:

generator.py

import time 

def gera(value_start, value_end, value_step):
    while value_start <= value_end:
        yield value_start
        value_start += value_step

def update(current, new, var):
    print "var:", var, "  id(var):", id(var)        
    if (new >= current):
        current = new
        var = current
    print "var:", var, "  id(var):", id(var)        


def run(value_start, value_end, value_step, var):
    current = 0
    print "id(var):", id(var)  
    for x in gera(value_start, value_end, value_step):
        time.sleep(0.1)
        update(current, x, var)        
        print "\n", x
    print "id(var):", id(var)  
    print "var:", var

main.py

import generator
x= 30
print "x=",x, "  id(x)=", id(x)
print "\nX should come out with value 5 \n"
generator.run(1,5,1,x)
print x

但是,x的值没有改变。 这是输出:

x= 30   id(x)= 37466652

X should come out with value 5 

id(var): 37466652
var: 30   id(var): 37466652
var: 1   id(var): 37467000

1
var: 30   id(var): 37466652
var: 2   id(var): 37466988

2
var: 30   id(var): 37466652
var: 3   id(var): 37466976

3
var: 30   id(var): 37466652
var: 4   id(var): 37466964

4
var: 30   id(var): 37466652
var: 5   id(var): 37466952

5
id(var): 37466652
var: 30
30

看起来ID保持不变,但在函数之外,因为当它出现时,具有不同的ID。 应以5结尾的值,以30结束。

正如我为这个程序所做的那样,得到参数X的变量,其值在函数内发生变化。

谢谢你。

1 个答案:

答案 0 :(得分:0)

我不明白所有这些ID应该向你展示什么,但问题是你的更新功能什么都不做。所有交换该函数内部值的方法都是将它们分配给该函数内的新本地名称;它不会以任何方式影响分配给其他地方名称的值。