使用for循环在函数内迭代不起作用?

时间:2011-08-26 19:39:17

标签: python

当我在函数中使用for循环(见下文)时,for循环下面的语句块不会被迭代,

def F(rho, m, E, v_rho, v_m, v_E):
    for n in xrange(N):
        #Update conserved quantities
        rho = G(Evolve_rho1(rho))
        m = momentum(Evolve_m1(m))
        E = Energy(Evolve_E1(E))
        v_rho = rho_v(Evolve_rho_v(rho))
        v_m = m_v(Evolve_mv(m))
        v_E = E_v(Evolve_Ev(E))

    return (rho, m, E, v_rho, v_m, v_E)

因为以这种方式调用函数后:density, momentum, Energy, dflux, mflux, Eflux = F(rho, m, E, v_rho, v_m, v_E)和 打印例如密度,导致错误答案。

但是,如果我只使用下面的循环,它可以正常工作。

for n in xrange(N):
    #Update conserved quantities
    rho = G(Evolve_rho1(rho))
    m = momentum(Evolve_m1(m))
    E = Energy(Evolve_E1(E))
    v_rho = rho_v(Evolve_rho_v(rho))
    v_m = m_v(Evolve_mv(m))
    v_E = E_v(Evolve_Ev(E))
print rho
print m

等,给出正确的结果。

欢迎并赞赏任何建议。

2 个答案:

答案 0 :(得分:1)

我猜你错过了N的全局和本地视图之间的区别。正如您所写的那样,N 函数F的值将是调用F时的N,而不是在定义时{N}。因此,如果在F调用N==0时,则永远不会执行循环块。

答案 1 :(得分:0)

该函数使用的是全局变量而不是本地变量,它们在F()的每次迭代中都会更新。解决方案是将变量作为参数传递并定义`

def F(rho, m, E, v_rho, v_m, v_E):
    for n in xrange(N):                                  
        rho = G(Evolve_rho1(rho,v_rho,m))
        m  = momentum(Evolve_m1(rho,v_rho, m,v_m,E))
        E = Energy(Evolve_E1(rho, m, E, v_E))
        v_rho = rho_v(Evolve_rho_v(rho,v_rho,m))
        v_m =   m_v( Evolve_mv(rho,v_rho, m,v_m,E)) 
        v_E  =  E_v(Evolve_Ev(rho, m, E, v_E))
    return (rho, m, E, v_rho, v_m, v_E) 

感谢所有人的贡献。