Python中的多返回异常问题
当我调用函数“Python中的多返回异常问题,python,Python,当我调用函数“G()”时,它返回两个值:p_T和q_T两次(见下文),但使用相同的样式,即p_T,neg=G();U、 Ign=G()并打印P\U T和U的总和,我得到两个不同的答案!另一件事是两个答案都不正确 我只包含了部分代码,可以简单地帮助解释这个想法。for循环下函数G()中的语句块按照循环的建议执行N次。全局变量声明是否影响了某些内容 任何关于什么是错误以及如何修复的建议都将不胜感激 def G(): global p_T; global q_T for n in r
G()
”时,它返回两个值:p_T
和q_T
两次(见下文),但使用相同的样式,即p_T,neg=G();U、 Ign=G()
并打印P\U T
和U
的总和,我得到两个不同的答案!另一件事是两个答案都不正确
我只包含了部分代码,可以简单地帮助解释这个想法。for循环下函数G()
中的语句块按照循环的建议执行N次。全局变量声明是否影响了某些内容
任何关于什么是错误以及如何修复的建议都将不胜感激
def G():
global p_T; global q_T
for n in range(N):
p_T = U_T(EvolveU_T(p_T))
q_T = V_T(EvolveV_T(q_T))
return p_T, q_T
P_T, neg = G()
print sum(P_T)
U, Ign = G()
print sum(U)
你有全球国家。你改变了全局状态。然后你再次变异它,从你停止的地方开始。所以P_T是N次运算后的结果,U是2N次运算后的结果
不要使用全局状态。您有全局状态。你改变了全局状态。然后你再次变异它,从你停止的地方开始。所以P_T是N次运算后的结果,U是2N次运算后的结果
不要使用全局状态。因为
p\u t
和q\u t
是全局的,它们的作用域不是函数的局部范围。因此,在调用函数两次后得到两个不同的答案也就不足为奇了。下面是一个简单的示例,演示了发生的情况:
class C:
foo = ''
def __repr__(self):
return self.foo
x, y = C(), C()
def F():
global x
global y
x.foo += 'x'
y.foo += 'y'
return (x, y)
print F()
print F()
全局变量x和y保持其值,因为它们的作用域不限于函数。如果它们是在函数中声明和初始化的,而没有使用global
修饰符,您将看到(x,y)两次。但你却看到:
(x, y)
(xx, yy)
一般来说,全局变量被认为是糟糕的编程实践,因为它们可能会导致混乱的状态量,而正如您所发现的,这些状态量并没有局限于所考虑的函数。因为
p\T
和q\T
都是全局变量,它们的作用域不是函数的局部。因此,在调用函数两次后得到两个不同的答案也就不足为奇了。下面是一个简单的示例,演示了发生的情况:
class C:
foo = ''
def __repr__(self):
return self.foo
x, y = C(), C()
def F():
global x
global y
x.foo += 'x'
y.foo += 'y'
return (x, y)
print F()
print F()
全局变量x和y保持其值,因为它们的作用域不限于函数。如果它们是在函数中声明和初始化的,而没有使用global
修饰符,您将看到(x,y)两次。但你却看到:
(x, y)
(xx, yy)
一般来说,全局变量被认为是糟糕的编程实践,因为它们可能会导致混乱的状态量,而这些状态量并非局限于所考虑的函数,正如您所发现的。@Liutauras没有理由将代码的空格加倍。如果不知道
?\u T
和进化?\u T
是什么,我们就无法提供帮助。另外,请重写标题,“多次返回”没有任何意义。一般来说,不要使用太多全局变量。为什么?因为你最终会遇到像这样奇怪的bug…@Liutauras没有理由将代码的空格加倍。如果不知道?\u T
和进化?\u T
是什么,我们就无法提供帮助。另外,请重写标题,“多次返回”没有任何意义。一般来说,不要使用太多全局变量。为什么?因为你最终会遇到像这样奇怪的虫子。。。