0

我对编码非常陌生,并且在功能方面遇到了麻烦。这有什么问题,我该如何正确地做到这一点?

x = 0
def function():
    x = x + 1
    return(x)
x = 2
x = function()
print(x)
4

2 回答 2

0

如果要分配位于函数外部的变量,请将函数更改为此:

def function():
    global x
    x = x + 1
    return x
于 2020-07-24T15:50:04.740 回答
0

如果您在函数中的任何位置修改(绑定)变量,除非显式声明或(a) ,否则该变量在该函数中的任何位置都被视为局部变量Python 执行模型涵盖了这一点:globalnonlocal

如果名称绑定在块中,则它是该块的局部变量,除非...

换句话说,你所拥有的是有效的:

x = 0
def function():
    local_x = local_x + 1 # use of unitialised local_x
    return(local_x)

这意味着您需要类似的东西:

x = 0
def function():
    global x
    x = x + 1 # use of initialised x
    return(x)

但是,请记住,全局变量大多是错误的做事方式。它们对于小型程序可能没问题,但当您达到一定的复杂程度时,它们可能会成为一场噩梦。

一种方法是只传入变量并传回修改后的值,在调用者中重新分配它:

def function(value):
    return value + 1

def caller():
    non_global_x = function(non_global_x)

请注意,在这种情况下它non_global_x 可能仍然是全局变量,但它也可以是任何其他合适的变量,例如对象的成员。


(a)这两者之间的区别在于这global意味着全局,这意味着它将在任何地方都可用。非局部变量只是指层次结构中某处的变量,但您可能会在进入全局范围之前找到它们(通常用于嵌套函数)。

于 2020-07-24T15:51:25.030 回答