2016-03-26 19 views
-3

make_averaged işlevinde tanımladığım num_samples değişkenini kullanmak istiyorum. Değişkeni fun_averaged'da kullandığımda, upper level işlevinin kapsamında arama yapmalıdır.Üst düzey işlevinin değişkenini kullanma

while not num_samples == 0: 
    totalave = fn(*args) + totalave 
    num_samples -= 1 

içine:

for _ in range(num_samples): 
    totalave = fn(*args) + totalave 

yardım etmeli

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 

Ancak bir hata değiştirme

while not samples1 == 0: 
UnboundLocalError: local variable 'samples1' referenced before assignment 
+0

Burada sadece bir işlev daha basit olmaz mıydı? –

+1

Hata, gösterilen kodda meydana gelmiş gibi görünmüyor. –

+1

Peki, "samples1" i nerede tanımlarsınız? – timgeb

cevap

0

olsun. num_samples dış işlevinden, ancak += ile atayamazsınız.

Ben bu durum için tavsiye, ama Python 3'te size niyetinde ne fiili için nonlocal kullanabilirsiniz:

nonlocal num_samples 
while not num_samples == 0: 
    totalave = fn(*args) + totalave 
    num_samples -= 1 

O fun_averaged ilk çağrı için çalışır. Ancak fun_averaged numaralı telefonu aradığınızda num_samples değeri 0 olacaktır.

+0

Dış fonksiyon kullanmak zorunda mıyım? "Make_averaged" içinde "make_averaged" içinde "num_samples" içindeki "num_samples" değerini arayacak "fun_averaged" (* args) "diye düşündüm. – Alex

+0

İçerisinde görebiliyor ve kullanabiliyor, ancak buna atamıyor. Kullandığınız anda '+ =' num_samples'ı yerel bir değişken olarak kabul eder. –

+0

Çok teşekkür ederim! – Alex

İlgili konular