В этой лабораторной работе вы познакомитесь с двумя фундаментальными концепциями программирования на Python: функциями и модулями. Функции позволяют структурировать код в виде переиспользуемых блоков, что делает программы модульными и более понятными. Модули дают возможность группировать связанные функции и переменные в отдельные файлы, упрощая повторное использование кода и поддержку проектов. Освоив эти инструменты, вы сможете писать более эффективный и организованный код.
Определение и использование функций
На этом этапе вы научитесь определять и вызывать функции в Python.
Запустите интерпретатор Python, введя следующую команду в терминале:
python
Вы увидите приглашение к вводу (>>>), которое означает, что вы находитесь в интерактивной оболочке Python.
Начнем с определения простой функции, которая приветствует пользователя. Введите в интерпретаторе следующий код:
def greet(name):
return f"Hello, {name}!"
result = greet("Alice")
print(result)
Вы должны увидеть следующий результат:
Hello, Alice!
Функции определяются с помощью ключевого слова def, за которым следует имя функции и параметры в скобках. Тело функции выделяется отступом.
Эта функция принимает параметр name и возвращает строку приветствия. Затем мы вызываем функцию с аргументом "Alice" и выводим результат.
Оператор return используется для возврата значения из функции. Если return отсутствует, функция возвращает None.
Функции позволяют инкапсулировать логику для многократного использования и выполнения конкретных задач. Это основной строительный блок программ на Python.
Теперь создадим функцию для выполнения расчетов:
def calculate_area(length, width):
return length * width
area = calculate_area(5, 3)
print(f"The area is: {area}")
Вы увидите следующий результат:
The area is: 15
Эта функция вычисляет площадь прямоугольника по заданным длине и ширине.
Функции также могут иметь значения параметров по умолчанию:
def power(base, exponent=2):
return base ** exponent
print(power(3))
print(power(3, 3))
Вы увидите следующий результат:
9
27
В данном случае, если значение степени не указано, функция использует 2 в качестве значения по умолчанию.
Функции могут возвращать несколько значений, используя кортежи:
Эта функция возвращает одновременно минимальное и максимальное значения из списка чисел.
Помните, что в Python отступы имеют критическое значение. Тело функции всегда должно быть смещено вправо на одинаковое количество пробелов.
Понимание области видимости функций
На этом этапе вы узнаете об области видимости функций и о том, как ведут себя переменные внутри и снаружи функций.
Давайте изучим локальные и глобальные переменные в интерпретаторе Python:
x = 10 ## Global variable
def print_x():
print(f"Global x: {x}")
print_x()
def change_x():
x = 20 ## Local variable
print(f"Local x: {x}")
change_x()
print(f"Global x after change_x(): {x}")
Вы увидите следующий результат:
Global x: 10
Local x: 20
Global x after change_x(): 10
Обратите внимание, что функция change_x() создает новую локальную переменную x, которая никак не влияет на глобальную переменную x.
Чтобы изменить глобальную переменную внутри функции, необходимо использовать ключевое слово global:
def modify_global_x():
global x
x = 30
print(f"Modified global x: {x}")
modify_global_x()
print(f"Global x after modify_global_x(): {x}")
Вы увидите следующий результат:
Modified global x: 30
Global x after modify_global_x(): 30
Теперь глобальная переменная x была успешно изменена.
Функции также могут обращаться к переменным из внешней (охватывающей) области видимости:
Вложенная функция имеет доступ к параметру x внешней функции.
Понимание области видимости критически важно для написания чистого кода без багов. Это помогает избежать непреднамеренных побочных эффектов и делает работу функций предсказуемой.
Создание и использование модулей
На этом этапе вы научитесь создавать и использовать собственные модули Python.
Выйдите из интерпретатора Python, введя exit() или нажав Ctrl+D.
Откройте WebIDE в среде LabEx VM.
Создайте новый файл с именем math_operations.py в директории ~/project:
touch ~/project/math_operations.py
Откройте созданный файл в редакторе WebIDE и добавьте в него следующий код:
## math_operations.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if b != 0:
return a / b
else:
return "Error: Division by zero"
PI = 3.14159
Этот модуль содержит четыре базовые математические операции и константу PI.
Сохраните файл (в WebIDE включено автосохранение).
Теперь создайте еще один файл с именем use_math_module.py в той же директории:
touch ~/project/use_math_module.py
Откройте use_math_module.py в редакторе и добавьте следующий код:
Этот скрипт импортирует модуль math_operations и использует его функции и константу.
Сохраните файл и запустите его с помощью следующей команды в терминале:
python ~/project/use_math_module.py
Вы должны увидеть результат, похожий на этот:
Addition: 8
Subtraction: 6
Multiplication: 12
Division: 5.0
Value of PI: 3.14159
Создавая модули, вы можете распределять связанные функции и переменные по разным файлам, что делает код более удобным для поддержки и повторного использования.
Когда вы импортируете модуль, Python компилирует его в байт-код и сохраняет в директории __pycache__. Эта папка создается там же, где находится файл модуля, и содержит скомпилированные файлы байт-кода (.pyc или .pyo).
Вы можете игнорировать эту директорию, так как Python управляет компиляцией и кэшированием модулей автоматически.
Импорт конкретных функций из модулей
На этом этапе вы научитесь импортировать отдельные функции из модулей и использовать псевдонимы (alias) для сокращения кода.
Создайте новый файл advanced_math.py в директории ~/project:
touch ~/project/advanced_math.py
Откройте advanced_math.py в редакторе и добавьте следующий контент:
Этот модуль использует встроенный модуль Python math для реализации более сложных математических операций.
Теперь создайте файл use_advanced_math.py в той же директории:
touch ~/project/use_advanced_math.py
Откройте use_advanced_math.py в редакторе и добавьте следующий код:
## use_advanced_math.py
from advanced_math import square_root, power
from advanced_math import sin as sine, cos as cosine
x = 16
y = 2
angle = 30
print(f"Square root of {x}: {square_root(x)}")
print(f"{x} to the power of {y}: {power(x, y)}")
print(f"Sine of {angle} degrees: {sine(angle)}")
print(f"Cosine of {angle} degrees: {cosine(angle)}")
Этот скрипт импортирует только нужные функции из модуля advanced_math и назначает псевдонимы для sin и cos.
Сохраните файл и запустите его:
python ~/project/use_advanced_math.py
Вы увидите результат:
Square root of 16: 4.0
16 to the power of 2: 256.0
Sine of 30 degrees: 0.49999999999999994
Cosine of 30 degrees: 0.8660254037844387
Импорт конкретных функций и использование псевдонимов делают код более читаемым и помогают избежать конфликтов имен между разными модулями.
Создание пакета
На заключительном этапе вы научитесь создавать пакеты — это способ организации связанных модулей в иерархическую структуру директорий.
Создайте новую директорию geometry в папке ~/project:
mkdir ~/project/geometry
Внутри директории geometry создайте два файла: __init__.py и shapes.py:
Теперь создайте файл use_geometry_package.py в корневой директории ~/project:
touch ~/project/use_geometry_package.py
Откройте use_geometry_package.py и добавьте следующий код:
## use_geometry_package.py
from geometry.shapes import circle_area, rectangle_area, triangle_area
radius = 5
length = 4
width = 6
base = 3
height = 8
print(f"Area of circle with radius {radius}: {circle_area(radius):.2f}")
print(f"Area of rectangle with length {length} and width {width}: {rectangle_area(length, width)}")
print(f"Area of triangle with base {base} and height {height}: {triangle_area(base, height)}")
Сохраните файл и запустите его:
python ~/project/use_geometry_package.py
Вы увидите результат:
Area of circle with radius 5: 78.54
Area of rectangle with length 4 and width 6: 24
Area of triangle with base 3 and height 8: 12.0
Создав пакет, вы организовали связанные модули в иерархию папок, что значительно упрощает управление функциональностью и импорт в крупных проектах.
Резюме
В этой лабораторной работе вы изучили две фундаментальные концепции программирования на Python: функции и модули. Вы научились определять и вызывать функции, разбираться в области видимости, создавать собственные модули, импортировать из них конкретные элементы и организовывать модули в пакеты.
Вы начали с создания простых функций и постепенно перешли к более сложным темам, таким как область видимости и глобальные переменные. Затем вы узнали, как использовать модули для разделения кода на логические части, что делает его пригодным для повторного использования.
Вы изучили различные способы импорта, включая выборочный импорт и использование псевдонимов. Эти знания позволяют писать лаконичный и понятный код, избегая конфликтов имен.
Наконец, вы научились создавать пакеты, что особенно полезно в больших проектах, где требуется структурировать множество связанных модулей.
Функции и модули — это ключ к написанию хорошо организованного и эффективного кода на Python. По мере вашего развития в программировании эти навыки станут незаменимыми для создания сложных систем и совместной работы над крупными проектами. Регулярно практикуйтесь и изучайте обширную экосистему готовых модулей и пакетов Python, чтобы расширить свои возможности.