当我在函数中使用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
等,给出正确的结果。
欢迎并赞赏任何建议。
答案 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)
感谢所有人的贡献。