【发布时间】:2020-07-25 09:19:20
【问题描述】:
我对编码非常陌生,并且在使用功能时遇到了麻烦。这有什么问题,我该如何正确地做到这一点?
x = 0
def function():
x = x + 1
return(x)
x = 2
x = function()
print(x)
【问题讨论】:
我对编码非常陌生,并且在使用功能时遇到了麻烦。这有什么问题,我该如何正确地做到这一点?
x = 0
def function():
x = x + 1
return(x)
x = 2
x = function()
print(x)
【问题讨论】:
如果您在函数中修改(绑定)变量anywhere,除非明确声明global 或nonlocal,否则该变量在该函数中被视为本地everywhere sup>(a)。 Python execution model 涵盖了这一点:
如果名称绑定在块中,则它是该块的局部变量,除非...
换句话说,你所拥有的是有效的:
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 表示全局,意味着它可以在任何地方使用。非局部变量只是指层次结构中某处的变量,但您可能会在进入全局范围之前找到它们(通常用于嵌套函数)。
【讨论】:
如果要分配位于函数外的变量,请将函数更改为此:
def function():
global x
x = x + 1
return x
【讨论】: