Mam metodę że mam uszkodzony na mniejsze funkcji zagnieżdżonych rozbić bazę kodu:połączeń Zagnieżdżone funkcji w Pythonie
def foo(x,y):
def do_this(x,y):
pass
def do_that(x,y):
pass
do_this(x,y)
do_that(x,y)
return
Czy istnieje sposób, aby uruchomić jeden z zagnieżdżonych funkcji przez siebie. np:
foo.do_this(x,y)
EDIT:
Próbuję buforowania konfiguracji na serwerze WWW I zostały zbudowane przy użyciu pyramid_breaker
def getThis(request):
def invalidate_data(getData,'long_term',search_term):
region_invalidate(getData,'long_term',search_term)
@cached_region('long_term')
def getData(search_term):
return response
search_term = request.matchdict['searchterm']
return getData(search_term)
To jest moje zrozumienie może nie być dokładne:
Powodem, dla którego mam to, jest to, że przestrzeń nazw używana przez dekorator do tworzenia klucza pamięci podręcznej jest generowana z funkcji i argumenty. Nie można zatem po prostu wstawić dekoratora getThis, ponieważ zmienna żądania jest unikalna, a pamięć podręczna jest bezużyteczna. Stworzyłem więc wewnętrzną funkcję, która ma powtarzalne argumenty (search_term).
Aby unieważnić pamięć podręczną (tj. Odświeżyć), funkcja unieważniania wymaga zakresu, aby poznać funkcję "getData", więc musi również zostać zagnieżdżona. Dlatego muszę wywołać funkcję zagnieżdżoną. Wy, wspaniali ludzie, jasno powiedzieliście, że nie jest to możliwe, więc czy ktoś może wyjaśnić, jak mógłbym to zrobić z inną strukturą?
kod 'foo.do_this' spróbuje do_this dostępowych jako FUNCT członkiem jon 'foo', który da ci błąd atrybutu, zamiast tego uczyń foo jako klasą – avasal
" zlikwiduj podstawę kodu ", to dla której przestrzeni nazw modułu są dobre. Jeśli naprawdę chcesz * enkapsulować * funkcje 'do_', wówczas użyj klasy jako @lazyr shows. – msw
Funkcje zagnieżdżone nie są sposobem konstruowania kodu w Pythonie (nie są też klasami). Zobacz [moduły] (http://docs.python.org/tutorial/modules.html). – georg