Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的多返回异常问题_Python - Fatal编程技术网

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
是什么,我们就无法提供帮助。另外,请重写标题,“多次返回”没有任何意义。一般来说,不要使用太多全局变量。为什么?因为你最终会遇到像这样奇怪的虫子。。。