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