Funciones con parámetros

Introducción

A medida que reducimos nuestro código y removemos sentencias duplicadas, lo estamos factorizando. Esto es muy bueno. Pero las funciones que hemos definido hasta ahora no son muy flexibles. Las variables están definidas dentro de la función, entonces, si queremos usar un ángulo o distancia diferentes necesitamos escribir una nueva función. Nuestra función hexagon sólo puede dibujar hexágonos de un solo tamaño!

Es por esto que necesitamos poder entregar parámetros, tambien llamados argumentos, a la función. De esta forma las variables en la función pueden tener valores diferentes cada vez que llamemos a la función:

Recuerde como definimos la función line_without_moving() en la sección anterior:

def line_without_moving():
    turtle.forward(50)
    turtle.backward(50)

Podemos mejorarla dándole un parámetro:

def line_without_moving(length):
    turtle.forward(length)
    turtle.backward(length)

El parámetro actúa como una variable sólo conocida dentro de la definición de la función. Podemos usar la nueva función definida llamándola con el valor que queremos que tenga el parámetro, por ejemplo:

line_without_moving(50)
line_without_moving(40)

Hemos estado usando funciones con parámetros desde el principio del tutorial con turtle.forward(), turtle.left(), etc...

Y podemos poner tantos argumentos (o parámetros) como queramos, separándolos con comas y dándoles nombres distintos:

def tilted_line_without_moving(length, angle):
    turtle.left(angle)
    turtle.forward(length)
    turtle.backward(length)

Una función parametrizada para un hexágono de tamaño variable

Ejercicio

Escriba una función que permita dibujar hexágonos de cualquier tamaño que quiera, cada vez que llama a la función.

Solución

def hexagon(size):
    for _ in range(6):
        turtle.forward(size)
        turtle.left(60)

Una función con varios parámetros

Ejercicio

Escriba una función que dibuje una figura de cualquier número de lados (asumamos mayor a dos) de cualquier largo de sus lados. Hágala dibujar diferentes figuras.

Acá hay un ejemplo de figuras dibujadas con esta función:

_images/shapes.png

Truco

The sum of the external angles of any shape is always 360 degrees!

Solución

def draw_shape(sides, length):
    for _ in range(sides):
        turtle.forward(length)
        turtle.right(360 / sides)

Bonus

Puede sonar un poco loco, pero es perfectamente posible pasar como parámetro a una función otra función! Python considera a las funciones como perfectamente ‘cosas’ normales, lo mismo para variables, números y strings.

Por ejemplo, puede dibujar una función que dibuje figuras que gire en un sentido o en otro dependiendo de que función de tortuga se le entregue - turtle.left o turtle.rught.

Vea si puede implementar esto!

Nota

Pasar una función (por ejemplo turtle.left) es diferente a llamarla, que se escribiría turtle.left(45).