sábado, 12 de abril de 2025

Thinkcspy 6.6. Las funciones pueden llamar a otras funciones

Es importante comprender que cada una de las funciones que escribimos se puede usar y llamado desde otras funciones que escribimos. Este es uno de los más importantes formas en que los científicos informáticos toman un gran problema y lo dividen en un grupo de problemas más pequeños. Este proceso de romper un problema en más pequeños subproblemas se llama descomposición funcional.

Aquí hay un ejemplo simple de descomposición funcional utilizando dos funciones. El Primera función llamada square Simplemente calcula el cuadrado de un número dado. La segunda función llamó sum_of_squares utiliza el cuadrado para calcular La suma de tres números que han sido cuadrados. 

 >>

def square(x):
2        y = x * x
3        return y
4    
5    def sum_of_squares(x, y, z):
6        a = square(x)
7        b = square(y)
8        c = square(z)
9    
10        return a + b + c
11    
12    a = -5
13    b = 2
14    c = 10
15    result = sum_of_squares(a, b, c)
16    print(result)

>> 

Aunque esta es una idea bastante simple, en la práctica este ejemplo ilustra muchos conceptos de Python muy importantes, incluidos los locales y globales Variables junto con el paso de parámetros. Tenga en cuenta que cuando atraviesas esto Ejemplo, Codelens Bolds Line 1 y Line 5 a medida que se definen las funciones. El cuerpo de cuadrado no se ejecuta hasta que se llama desde el sum_of_squares función por primera vez en la línea 6. También tenga en cuenta que cuando square es llamado hay dos grupos de variables locales, uno para square y uno para sum_of_squares. A medida que avance, notará que x, y y son variables locales en ambas funciones e incluso pueden tener diferentes valores. Esto ilustra que a pesar de que se denominan iguales, De hecho, son muy diferentes.

Ahora veremos otro ejemplo que usa dos funciones. Este ejemplo ilustra un importante técnica de resolución de problemas de informática llamada generalización . Suponga que queremos escribir una función para dibujar un cuadrado. El paso de generalización es darse cuenta de que un Square es solo un tipo especial de rectángulo.

Para dibujar un rectángulo necesitamos poder llamar a una función con diferente Argumentos de ancho y altura. A diferencia del caso de la plaza, No podemos repetir lo mismo 4 veces, porque los cuatro lados no son iguales. Sin embargo, es el caso que dibujar los lados inferior y derecho son los La misma secuencia que dibujar los lados superior e izquierdo. Entonces finalmente se nos ocurrió Este código bastante bonito que puede dibujar un rectángulo. 

 >>def drawRectangle(t, w, h):
 >>   """Get turtle t to draw a rectangle of width w and height h."""
 >>   for i in range(2):
 >>       t.forward(w)
 >>       t.left(90)
 >>       t.forward(h)
 >>       t.left(90)

Los nombres de los parámetros se eligen como letras individuales para la concisión. En programas reales, insistiremos en mejores nombres de variables que este. El punto es que el programa no "entiende" que estás dibujando un rectángulo o que el Los parámetros representan el ancho y la altura. Conceptos como rectángulo, ancho y altura son significativos para humanos. No son conceptos que el programa o la computadora entiendan.

Pensar como un científico informático implica buscar patrones y relaciones. En el código anterior, lo hemos hecho hasta cierto punto. Hicimos No solo dibuja cuatro lados. En cambio, vimos que podríamos dibujar el Rectángulo como dos mitades y usó un bucle para repetir ese patrón dos veces.

Pero ahora podríamos detectar que un cuadrado es un tipo especial de rectángulo. Un cuadrado Simplemente usa el mismo valor tanto para la altura como para el ancho. Ya tenemos una función que dibuja un rectángulo, por lo que podemos usarla para dibujar nuestra plaza.

>>def drawSquare(tx, sz):        # a new version of drawSquare
>>    drawRectangle(tx, sz, sz)

 

Aquí está el ejemplo completo con el código de configuración necesario.

Hay algunos puntos que vale la pena señalar aquí:

  • Las funciones pueden llamar a otras funciones.

  • Reescritura drawSquare como este captura la relación que hemos visto.

  • Una persona que llama de esta función podría decir drawSquare(tess, 50). Los parámetros de esta función, txy sz, se les asigna los valores del objeto tess, y El entero 50 respectivamente.

  • En el cuerpo de la función, tzy sz son como cualquier otra variable.

  • Cuando se hace la llamada a drawRectangle, los valores en las variables txy sz se obtienen primero, luego la llamada ocurre. Entonces, cuando entramos en la parte superior de función drawRectangle, su variable t se le asigna el objeto tess, y wy h En esa función se les da el valor 50.

Hasta ahora, puede no estar claro por qué vale la pena crear todos estos Nuevas funciones. En realidad, hay muchas razones, pero este ejemplo Demuestra dos:

  1. Crear una nueva función le brinda la oportunidad de nombrar a un grupo de declaraciones. Las funciones pueden simplificar un programa ocultando un cálculo complejo detrás de un solo comando. La función (incluido su nombre) puede capturar su La fragmentación mental o la abstracción del problema.

  2. Crear una nueva función puede hacer que un programa sea más pequeño al eliminar repetitivo código.

  3. A veces puedes escribir funciones que te permitan resolver un Problema usando una solución más general.

Laboratorio

  • Dibujando un círculo en este ejercicio de laboratorio guiado, trabajaremos A través de un simple ejercicio de resolución de problemas relacionados con el dibujo de un círculo con la tortuga.


No hay comentarios.:

Publicar un comentario

Entradas recientes

Thinkcspy 6.6. Las funciones pueden llamar a otras funciones

E s importante comprender que cada una de las funciones que escribimos se puede usar y llamado desde otras funciones que escribimos. Este es...

Entradas Populares