flowchart LR
A[ ] -->|name| B["👋🏼<br/>hello2"]
C[ ] -->|rep| B
style B fill:#ffe0e6,stroke:#d6336c,stroke-width:2px,rx:15,ry:15,min-width:200px,min-height:100px
style A fill:none,stroke:none
style C fill:none,stroke:none
Функция – это именованный набор инструкций, которые могут быть выполнены в любом месте программы, после вызова функции.
Для объявление функции используется инструкция def.
Строка с инструкцией def называется заголовком функции, а блок инструкций внутри функции называется телом функции.
Имя функции следует правилам именования переменных в Python.
Пример:
Если запустить код выше, то мы не увидим сообщений на экране. Нужно разделять определение функции и её вызов.
Чтобы вызвать функцию нужно записать её имя и в круглых скобках указать аргументы, если необходимо:
Проследим за вызовом функции hello по шагам.
Параметры функции - это входные данные, на основе которых функция должна получить требуемый результат.
Параметры перечисляются в заголовке определения функции через запятую.
Аргументы - буквальные значения или выражения, которые сопоставляются с параметрами в определении функции.
Неизменяемые объекты передаются по значению (числа, строки) и не могут быть изменены в теле функции.
Изменяемые объекты передаются по ссылке (списки) и могут быть изменены в теле функции.
Параметры и аргументы в Python могут сопоставляться несколькими способами.
По имени: указываем имена параметров из заголовка функции.
Переменное количество аргументов:
returnЧтобы вернуть значение из функции используется инструкция return.
Пример: функция square(x), которая возводит число x в квадрат:
flowchart LR
A[ ] -->|x| B["🟩<br/>square"]
B -->|return| E[ ]
style B fill:#ffe0e6,stroke:#d6336c,stroke-width:2px,rx:15,ry:15,min-width:200px,min-height:100px
style A fill:none,stroke:none
style E fill:none,stroke:none
Если в определении функции нет инструкции return то по окончании работы она всё равно вернёт специальное значение None:
После выполнения инструкции return функция прекращает свою работу.
В описании функции может быть несколько инструкций return:
Область видимости переменной определяется местом в котором ей было присвоено значение.
Существует две основные области видимости:
локальная: если присваивание значения переменной происходит внутри инструкции def то такая переменная будет локальной для этой функции;
глобальная: присваивание значение переменной происходит за пределами всех инструкций def.
r и square;x и y – присваивание значений обоим именам осуществляется внутри определения функции.Каждая функция в Python - это объект на который может ссылаться несколько имён, их можно сделать элементами списка.
В следующем примере три функции помещаем в список и перебираем этот список с помощью цикла for:
Каждый файл с расширением .py является модулем, который можно использовать самостоятельно, или импортировать в другой модуль (файл с кодом).
graph LR
subgraph Python-файлы
A[main.py]
B[mod1.py]
C[mod2.py]
A --> B
A --> C
end
A --> D[Cтандартная библиотека]
B --> D
C --> D
Переменные и функции внутри модуля называются атрибутами модуля.
Имя модуля должно следовать правилам именования переменных.
Инструкция import
В данном примере файлы calc.py и main.py должны располагаться в одной папке
Инструкция import
Загружает модуль целиком, поэтому при обращении к именам в модуле их необходимо дополнять именем модуля:
Инструкция from
Загружает (копирует) из модуля отдельные имена.
Из модуля можно загрузить в основной скрипт все атрибуты (*) либо только необходимые, перечислив их через запятую.
Пакетом называется набор модулей находящихся в одной папке.
Каталог пакетов расположен на сайте https://pypi.org/.
turtleЧтобы использовать модуль рисования turtle, нужно его импортировать в программу:
Объектно-ориентированный подход полезен в том случае, когда для рисования используют две и больше черепашек:
Текущее расположение и направление черепах можно узнать с помощью следующих методов:
| Свойство | Процедурный стиль | ООП стиль |
|---|---|---|
| Координата x Черепахи | xcor() |
<черепаха>.xcor() |
| Координата y Черепахи | ycor() |
<черепаха>.ycor() |
| Текущее направление Черепахи (в градусах) | heading() |
<черепаха>.heading() |
| Метод | Назначение |
|---|---|
forward(<пиксели>) |
Движение вперёд на указанное количество пикселей в сторону, куда направлена Черепаха |
backward(<пиксели>) |
Движение назад на указанное количество пикселей |
right(<градусы>) |
Поворот Черепахи направо на указанное количество градусов |
left(<градусы>) |
Поворот Черепахи налево на указанное количество градусов |
goto(x, y) |
Переместить Черепаху в точку с координатами (x, y). |
Нарисуем многоугольник в следующем примере, используя методы forward() и left():
Во время движения, черепашка рисует свою траекторию движения. Для настройки пера используются следующие методы:
| Метод | Назначение |
|---|---|
pensize(<пиксели>) |
Изменяем толщину линии |
penup() |
Поднимаем перо. С этого момента линия не рисуется |
pendown() |
Опускаем перо. С этого момента линия рисуется |
pencolor(<цвет>) |
Меняем цвет пера. Метод может принимать строковый аргумент <цвет> - название одного из встроенных цветов |
from turtle import *
# список цветов
colors = ["green", "orange", "blue", "indigo", "teal"]
for i in range(40):
# толщина линии зависит от итерации цикла
pensize(i)
# циклически меняем цвет линии: 0,1,2,3,4,0,1,2...
pencolor(colors[i % 5])
# с каждой итерацией увеличиваем длину стороны
forward(i * 2)
left(35)
done()Очерченный черепахой контур можно залить выбранным цветом.
| Метод | Назначение |
|---|---|
fillcolor(<цвет>) |
Выбираем цвет заливки |
begin_fill() |
Обозначаем начало контура |
end_fill() |
Обозначаем конец контура. Если контур не замкнут, то две крайние точки соединяться отрезком |