2013-10-17 14 views
7

kapalı-over değişkenleri kontrol/Yansıtan? Teftişe baktım ama 'çerçeve' maddelerinin bazılarının uygulanıp uygulanmayacağını söyleyemedim. Başka bir deyişle, aşağıda bir closedVars() tanımlayabiliriz: Sen f.func_closure kontrol ederek hücre içeriğini alabilirsinizben varsa Python

def closedVars(anF): 
    ... return ... 

assert closedVars(f2) == {'x': 2} 

cevap

5

inspect modülünü kullanmak zorunda değilsiniz. Python 2.7

harika
+0

müthiş, teşekkürler! – Des

+1

Python 3'te '' __code __. Co_freevars'', '__closure__'' ve' 'cell_contents'' işlevini kullanın. – Des

2

(Python 2.7.5 çalışır):

>>> def f(x): 
... def g(y): 
...  return x + y 
... return g 
... 
>>> f2 = f(2) 
>>> [cell.cell_contents for cell in f2.func_closure] 
[2] 

Python 3.3 bir sahiptir inspect.getclosurevars işlevi:

Bir Python işlevinde harici ad başvurularının eşlemesini veya geçerli değerlerine yöntem yöntemini öğrenin. Adlandırılmış bir tuple ClosureVars(nonlocals, globals, builtins, unbound) döndürülür. nonlocals alfabetik kapanma değişkenlerine, isimlendirilmiş modüllerin globals'larına ve işlev gövdesinden görülebilen yapılara yerleşik yapılara verilen isimleri eşler. unbound, mevcut modül globals ve builtins'leri göz önüne alındığında çözülemeyen fonksiyonda başvurulan isimler kümesidir.

Python 3.3 öncesi kapalı değişken değişken adlarını alabilirseniz henüz emin değilim.

+0

yılında

>>> dict(zip(f2.func_code.co_freevars, (c.cell_contents for c in f2.func_closure))) {'x': 2} 

eserler de 3.3 seçeneği hakkında bilmek, teşekkürler! – Des

İlgili konular