Python 在函数中使用for循环进行迭代不会';不行?

Python 在函数中使用for循环进行迭代不会';不行?,python,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 =

当我在函数中使用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)
因为以这种方式调用函数后:
密度、动量、能量、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
等等,给出正确的结果


欢迎并感谢您的任何建议。

我猜您忽略了
N
的全局vlue和本地vlue之间的区别。正如您编写的那样,
F
函数中的
N
的值将是调用
F
时N的值,而不是定义时N的值。因此,如果在调用
F
时调用
N==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) 

感谢各位的贡献。

这可能是粘贴错误,但函数中没有定义N。@Chris Pickett没有定义N会引发异常…尽管知道它没有精确设置为0会很好,但不知道N,很难诊断。不管问题是什么,这不是for-loop。我们没有足够的信息来帮助您解决问题。请设计一个最小的例子来说明问题,并张贴整个模块。