我想使用我在num_samples
函数中定义的make_averaged
变量。当我在fun_averaged
中使用变量时,它应该在upper level
函数的范围内搜索它。
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
答案 0 :(得分:0)
更改:
while not num_samples == 0:
totalave = fn(*args) + totalave
num_samples -= 1
成:
for _ in range(num_samples):
totalave = fn(*args) + totalave
应该有所帮助。您可以从外部函数访问num_samples
,但无法使用+=
分配{。}}。
我不推荐这种情况,但在Python 3中,您可以使用nonlocal
来实际执行您想要的操作:
nonlocal num_samples
while not num_samples == 0:
totalave = fn(*args) + totalave
num_samples -= 1
适用于fun_averaged
的第一次调用。但是,下次您致电fun_averaged
时,num_samples
的值将为0
。