Saltar al contenido

Funciones autoejecutables en Python

Solución:

Para una función A que se llamará solo en una función B específica, puede definir A en B, por lo que creo que el espacio de nombres no se contaminará. p.ej,

En lugar de :

def a_fn():
    //do something
def b_fn():
    //do something
def c_fn():
    b_fn()
    a_fn()

Usted puede:

def c_fn():
    def a_fn():
        //do something
    def b_fn():
        //do something
    b_fn()
    a_fn()

Aunque no estoy seguro de si es la forma pitónica, generalmente me gusta esto.

No lo haces. Es bueno en JavaScript, pero en Python, no tiene una sintaxis ligera ni la necesita. Si necesita un ámbito de función, defina una función y llámela. Pero muy a menudo no es necesario. Es posible que deba separar el código en varias funciones para hacerlo más comprensible, pero un nombre ayuda de todos modos, y puede ser útil en más de un lugar.

Además, no se preocupe por agregar más nombres a un espacio de nombres. Python, a diferencia de JavaScript, tiene espacios de nombres adecuados, por lo que un ayudante que defina en el ámbito del módulo no está visible en otros archivos de forma predeterminada (es decir, a menos que se importe).

Respecto a la segunda mitad de la pregunta

¿Existe una mejor manera de implementar una función autoejecutable?

La forma estándar (<function-expression>)() no es posible en Python, porque no hay forma de poner un bloque de varias líneas en un corchete sin romper la sintaxis fundamental de Python. No obstante, Python reconoce la necesidad de utilizar definiciones de funciones como expresiones y proporciona decoradores (PEP318) como alternativa. PEP318 tiene una discusión extensa sobre este tema, en caso de que alguien quisiera leer más.

Con los decoradores, sería como

evalfn = lambda f: f()

@evalfn
def _():
    print('I execute immediately')

Aunque sintácticamente muy diferente, veremos que realmente es lo mismo: la definición de función es anónima y se usa como expresión.

Usar decorador para funciones autoejecutables es un poco exagerado, en comparación con el método let-call-del que se muestra a continuación. Sin embargo, puede valer la pena intentarlo si hay muchas funciones de autoejecución, una función de autoejecución se está volviendo demasiado larga o simplemente no se molesta en nombrar estas funciones de autoejecución.

def f():
    print('I execute immediately')
f()
del f
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *