Мы уменьшаем количество нашего кода и добавляем функции, что бы избежать повторений - это называется рефакторинг. Рефакторинг крайне полезен. Ведь функции, которые мы определили не очень “гибкие”. Необходимые значения заданы внутри функций и если мы захотим изменить угол или дистанцию - нам прийдеться писать новую функцию. Наша функция для рисования шестиугольников может рисовать шестиугольники только одного размера!
Поэтому у нас должна быть возможность задавать параметры функции, которые также называют аргументами. В таком случае переменные в функции могут принимать разные значения кождый раз, когда мы вызываем нашу функцию:
Вспомни, как мы описали функцию line_without_moving()
в предыдущей главе:
def line_without_moving():
turtle.forward(50)
turtle.backward(50)
Мы можем улучить её используя параметр:
def line_without_moving(length):
turtle.forward(length)
turtle.backward(length)
Параметр функции действует как переменная, но только внутри функции, в которой мы его объявили. Теперь можно вызвать новую функцию со значением, которое необходимо ей передать:
line_without_moving(50)
line_without_moving(40)
Мы пользовались функциями с параметрами еще в самом начале учебника используя turtle.forward()
, turtle.left()
и т.д.
И мы можем вставить столько аргументов (или параметров), сколько захотим, дав им разные имена и разделив запятыми:
def tilted_line_without_moving(length, angle):
turtle.left(angle)
turtle.forward(length)
turtle.backward(length)
Напиши функцию для рисования шестиугольника, которая позволяет выбирать его размер при вызове.
def hexagon(size):
for _ in range(6):
turtle.forward(size)
turtle.left(60)
Напиши функцию для рисования фигур с произвольным количеством (т. е. >2) сторон любой длины и проверь её в деле.
Пример рисования фигур с помощью этой функции:
Совет
Сумма внешних углов любой фигуры всегда равна 360 градусов!
def draw_shape(sides, length):
for _ in range(sides):
turtle.forward(length)
turtle.right(360 / sides)
Это может звучать немного безумно, но вполне возможно передать функции в качестве параметра другую функцию — Python обращается с ними так же, как и с переменными, числами и строками.
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
.
Попоробуй, сможешь ли ты это сделать!
Примечание
Passing a function (e.g turtle.left
) is different than calling it, which
would instead be written turtle.left(45)
.