viernes, 18 de abril de 2025

Thinkcspy. Funciones / 6.8 Usando una funcion principal

 

6.8. Usando una función principal

Usar funciones es una buena idea. Nos ayuda a modularizar nuestro código rompiendo un programa en partes lógicas donde cada parte es responsable de una tarea específica. Por ejemplo, en uno de nuestros primeros programas allí fue una función llamada drawSquare Eso fue responsable de hacer que una tortuga dibujara un cuadrado de algún tamaño. La tortuga real y el tamaño real del cuadrado se definieron para proporcionar como parámetros. Aquí está ese programa original. 

>>import turtle

>>def drawSquare(t, sz):
>>    """Make turtle t draw a square of with side sz."""

>>    for i in range(4):
>>        t.forward(sz)
>>        t.left(90)


>>wn = turtle.Screen()          # Set up the window and its attributes
>>wn.bgcolor("lightgreen")

>>alex = turtle.Turtle()        # create alex
>>drawSquare(alex, 50)          # Call the function to draw the square

>>wn.exitonclick()

Si observa de cerca la estructura de este programa, notará que primero realizamos todos nuestros necesarios import declaraciones, en este caso para poder usar el turtle módulo. A continuación, definimos la función drawSquare. En este punto, podríamos haber definido tantas funciones como se necesitaran. Finalmente, hay cinco declaraciones que configuran la ventana, crean la tortuga, realizan la invocación de funciones y esperen a que un usuario haga clic para finalizar el programa.

Estas cinco declaraciones finales realizan el procesamiento principal que hará el programa. Observe que gran parte del detalle ha sido empujado dentro del drawSquare función. Sin embargo, todavía hay estas cinco líneas de código que se necesitan para hacer las cosas.

En muchos lenguajes de programación (por ejemplo, Java y C ++), no es posible simplemente tener declaraciones sentadas solas así en la parte inferior del programa. Deben ser parte de una función especial que es invoca automáticamente por el sistema operativo cuando se ejecuta el programa. Esta función especial se llama principal. Aunque el lenguaje de programación de Python no requiere esto, en realidad es una buena idea que podemos incorporar a la estructura lógica de nuestro programa. En otras palabras, estas cinco líneas están lógicamente relacionadas entre sí, ya que proporcionan las tareas principales que el programa realizará. Dado que las funciones están diseñadas para permitirnos dividir un programa en piezas lógicas, tiene sentido llamar a esta pieza main.

El siguiente Activecode muestra esta idea. En la línea 11 hemos definido una nueva función llamada main Eso no necesita ningún parámetro. Las cinco líneas de procesamiento principal ahora se colocan dentro de esta función. Finalmente, para ejecutar ese código de procesamiento principal, necesitamos invocar el main función (línea 20). Cuando presione la ejecución, verá que el programa funciona igual que antes. 

import turtle

def drawSquare(t, sz):
    """Make turtle t draw a square of with side sz."""

    for i in range(4):
        t.forward(sz)
        t.left(90)


def main():                      # Define the main function
    wn = turtle.Screen()         # Set up the window and its attributes
    wn.bgcolor("lightgreen")

    alex = turtle.Turtle()       # create alex
    drawSquare(alex, 50)         # Call the function to draw the square

    wn.exitonclick()

main()                           # Invoke the main function


Ahora nuestra estructura del programa es la siguiente. Primero, importe cualquier módulo que sea requerido. En segundo lugar, defina cualquier función que sea necesaria. Tercero, defina un main función que se inicie el proceso. Y finalmente, invoque la función principal (que a su vez llamará a las otras funciones según sea necesario).

Nota

En Python no hay nada especial en el nombre main. Podríamos haber llamado a esta función todo lo que quisiéramos. Elegimos main Solo para ser consistente con algunos de los otros idiomas.

Tema avanzado

Antes de que el intérprete de Python ejecute su programa, define algunas variables especiales. Una de esas variables se llama __name__ y se establece automáticamente en el valor de cadena "__main__" Cuando el programa se ejecuta solo de manera independiente. Por otro lado, si el programa está siendo importado por otro programa, entonces el __name__ La variable se establece en el nombre de ese módulo. Esto significa que podemos saber si el programa se está ejecutando solo o si está siendo utilizado por otro programa y, según esa observación, podemos o no elegir ejecutar parte del código que hemos escrito.

Por ejemplo, suponga que hemos escrito una colección de funciones para hacer algunas matemáticas simples. Podemos incluir un main función para invocar estas funciones matemáticas. Sin embargo, es mucho más probable que estas funciones sean importadas por otro programa para otro propósito. En ese caso, no querríamos ejecutar nuestra función principal.

El ActiveCode a continuación define dos funciones simples y una principal.

def squareit(n):
    return n * n

def cubeit(n):
    return n*n*n

def main():
    anum = int(input("Please enter a number"))
    print(squareit(anum))
    print(cubeit(anum))

if __name__ == "__main__":
    main()


La línea 12 usa un if declaración para preguntar sobre el valor del __name__ variable. Si el valor es "__main__", entonces el main se llamará a la función. De lo contrario, se puede suponer que el programa se está importando a otro programa y no queremos llamar main Porque ese programa invocará las funciones según sea necesario. Esta capacidad de ejecutar condicionalmente nuestra función principal puede ser extremadamente útil cuando estamos escribiendo código que potencialmente serán utilizados por otros. Nos permite incluir la funcionalidad que el usuario del código no necesitará, con mayor frecuencia como parte de un proceso de prueba para asegurarnos de que las funciones funcionen correctamente.

Nota

Para ejecutar condicionalmente el main función, utilizamos una estructura llamada if Declaración para crear lo que se conoce como selección. Este tema se estudiará con mucho más detalle más adelante.

No hay comentarios.:

Publicar un comentario

Entradas recientes

Sympy: Mecanica, Ejemplo de oscilador con un pendulo

  Oscilador Duffing con un péndulo En este ejemplo demostramos el uso de la funcionalidad proporcionada en sympy.physics.mechanics para de...

Entradas Populares