X Tutup
Functions with parameters ************************* Introduction ============ As we shrink down our code and add functions to remove duplication, we are *factorizing* it. This is a good thing to do. But the functions we have defined so far are not very flexible. The variables are defined inside the function, so if we want to use a different angle or a distance then we need to write a new function. Our hexagon function can only draw one size of hexagon! That is why we need to be able to give parameters, also called *arguments*, to the function. This way the *variables* in the function can have different values each time we call the function: Remember how we defined the function ``line_without_moving()`` in the previous section:: def line_without_moving(): turtle.forward(50) turtle.backward(50) We can improve it by giving it a parameter:: def line_without_moving(length): turtle.forward(length) turtle.backward(length) The parameter acts as a *variable* only known inside the function's definition. We use the newly defined function by calling it with the value we want the parameter to have like this:: line_without_moving(50) line_without_moving(40) We have been using functions with parameters since the beginning of the tutorial with ``turtle.forward()``, ``turtle.left()``, etc... And we can put as many arguments (or parameters) as we want, separating them with commas and giving them different names:: def tilted_line_without_moving(length, angle): turtle.left(angle) turtle.forward(length) turtle.backward(length) A parameterized function for a variable size hexagon ==================================================== Exercise -------- Write a function that allows you to draw hexagons of any size you want, each time you call the function. .. rst-class:: solution Solution -------- :: def hexagon(size): for _ in range(6): turtle.forward(size) turtle.left(60) A function of several parameters ================================ Exercise -------- Write a function that will draw a shape of *any* number of sides (let's assume greater than two) of any side length. Get it to draw some different shapes. Here's an example of drawing shapes with this function: .. image:: /images/shapes.png .. tip:: The sum of the external angles of any shape is always 360 degrees! .. rst-class:: solution Solution -------- :: def draw_shape(sides, length): for _ in range(sides): turtle.forward(length) turtle.right(360 / sides) Bonus ----- It might sound crazy, but it's perfectly possible to pass a *function* as a parameter to another function! Python regards functions as perfectly normal 'things', the same as variables, numbers and strings. For instance, you could create a shape drawing function which turned one way or another depending on which turtle function you passed to it - ``turtle.left`` or ``turtle.right``. See if you can implement this! .. note:: Passing a function (e.g ``turtle.left``) is different than *calling* it, which would instead be written ``turtle.left(45)``.
X Tutup