我对编码非常陌生,并且在功能方面遇到了麻烦。这有什么问题,我该如何正确地做到这一点?
x = 0
def function():
x = x + 1
return(x)
x = 2
x = function()
print(x)
如果要分配位于函数外部的变量,请将函数更改为此:
def function():
global x
x = x + 1
return x
如果您在函数中的任何位置修改(绑定)变量,除非显式声明或(a) ,否则该变量在该函数中的任何位置都被视为局部变量。Python 执行模型涵盖了这一点:global
nonlocal
如果名称绑定在块中,则它是该块的局部变量,除非...
换句话说,你所拥有的是有效的:
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
意味着全局,这意味着它将在任何地方都可用。非局部变量只是指层次结构中某处的变量,但您可能会在进入全局范围之前找到它们(通常用于嵌套函数)。