使用上级函数的变量

时间:2016-03-26 20:19:25

标签: python closures

我想使用我在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

1 个答案:

答案 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