tengo un método que he entrado en funciones anidadas más pequeños para romper la base de código:llamada función anidada en Python
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
¿Hay una forma de ejecutar una de las funciones anidadas por sí mismo. por ejemplo:
foo.do_this(x,y)
EDIT:
Estoy tratando de almacenamiento en caché de configuración en un servidor web que he construido utilizando 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)
Este es mi entendimiento puede no ser exacta:
Ahora la razón por la que tengo esto es que el espacio de nombres utilizado por el decorador para crear la clave de caché se genera desde la función y los argumentos. Por lo tanto, no puede simplemente poner el decorador en getThis ya que la variable request es unique-ish y la caché es inútil. Así que creé la función interna que tiene args repetibles (search_term).
Sin embargo, para invalidar la memoria caché (es decir, actualizar), la función de invalidación requiere un alcance para conocer la función 'getData', por lo que también debe estar anidada. Por lo tanto, necesito llamar a la función anidada. Ustedes personas maravillosas han dejado en claro que no es posible así que ¿alguien puede explicar cómo podría hacerlo con una estructura diferente?
su código 'foo.do_this' intentará do_this de acceso como miembro de func ion de 'foo', que le dará un error de atributo, en su lugar hacer foo como una clase – avasal
" romper la base de código "es lo que los espacios de nombres de los módulos son buenos. Si realmente quieres * encapsular * las funciones 'do_', utiliza una clase como muestra @lazyr. – msw
Las funciones anidadas no son la forma de estructurar el código en Python (tampoco lo son las clases). Eche un vistazo a [modules] (http://docs.python.org/tutorial/modules.html). – georg