Python 使用上层函数';s变量
我想使用我在Python 使用上层函数';s变量,python,closures,Python,Closures,我想使用我在make\u averaged函数中定义的num\u samples变量。当我在fun\u averaged中使用变量时,它应该在其上层函数的范围内搜索它 def make_averaged(fn, num_samples=1000): def fun_averaged(*args) : totalave = 0 savenum = num_samples while not num_samples == 0:
make\u averaged
函数中定义的num\u samples
变量。当我在fun\u averaged
中使用变量时,它应该在其上层
函数的范围内搜索它
def make_averaged(fn, num_samples=1000):
def fun_averaged(*args) :
totalave = 0
savenum = num_samples
while not num_samples == 0:
totalave = fn(*args) + totalave
num_samples -= 1
avetagevalue = totalave/savenum
return avetagevalue
return fun_averaged
然而,我得到了一个错误
while not samples1 == 0:
UnboundLocalError: local variable 'samples1' referenced before assignment
更改:
while not num_samples == 0:
totalave = fn(*args) + totalave
num_samples -= 1
进入:
应该有帮助。您可以从外部函数访问num_samples
,但不能使用+=
分配给它
我不建议在这种情况下使用它,但在Python 3中,您可以使用它来实际执行您想要执行的操作:
nonlocal num_samples
while not num_samples == 0:
totalave = fn(*args) + totalave
num_samples -= 1
它适用于第一次调用
fun\u
。但是下次调用fun\u averaged
时,num\u samples
的值将是0
这里不是只有一个函数更简单吗?显示的代码中似乎没有出现错误。那么您在哪里定义samples1
?您没有向fun\u averaged()传递任何参数
。我必须使用外部功能吗?我认为“fun_averaged(*args)”将在“make_averaged”中搜索“num_samples”的值,因为它位于“make_averaged”的内部,它可以看到并使用它,但不能分配给它。只要你使用+=
它就会认为num\u samples
是一个局部变量。实际上,它不能在外部函数中使用。我只能使用非局部变量
nonlocal num_samples
while not num_samples == 0:
totalave = fn(*args) + totalave
num_samples -= 1