Введение
В этой лабораторной работе вы изучите две фундаментальные концепции программирования на Python: функции и модули. Функции позволяют организовывать код в повторно используемые блоки, делая программы более модульными и понятными. Модули позволяют группировать связанные функции и переменные в отдельные файлы, что способствует повторному использованию и удобству сопровождения кода. Освоив эти концепции, вы сможете писать более эффективный и структурированный код на Python.
Определение и использование функций
На этом этапе вы узнаете, как определять и использовать функции в Python.
Откройте интерпретатор Python, введя следующую команду в терминале:
python
Вы должны увидеть приглашение Python (>>>), указывающее на то, что вы находитесь в интерактивной оболочке Python.

Начнем с определения простой функции, которая приветствует пользователя. В интерпретаторе Python сначала введите определение функции:
def greet(name):
return f"Hello, {name}!"
После ввода строки с отступом return нажмите Enter на пустой строке, чтобы завершить определение функции. Затем выполните функцию в том же интерпретаторе:
result = greet("Alice")
print(result)
Вы должны увидеть следующий вывод:
Hello, Alice!
Функции определяются с помощью ключевого слова def, за которым следует имя функции и параметры в скобках. Тело функции должно иметь отступ.
Эта функция принимает параметр name и возвращает строку приветствия. Затем мы вызываем функцию с аргументом "Alice" и выводим результат.
Оператор return используется для возврата значения из функции. Если оператор return отсутствует, функция возвращает None.
Функции можно использовать для инкапсуляции повторно используемого кода и выполнения конкретных задач. Это основной строительный блок программ на Python.
Теперь давайте создадим функцию, которая выполняет вычисления. Сначала определите функцию:
def calculate_area(length, width):
return length * width
Нажмите Enter на пустой строке, чтобы завершить определение, а затем вызовите функцию:
area = calculate_area(5, 3)
print(f"The area is: {area}")
Вы должны увидеть следующий вывод:
The area is: 15
Эта функция вычисляет площадь прямоугольника по его длине и ширине.
Функции также могут иметь значения параметров по умолчанию. Сначала определите функцию:
def power(base, exponent=2):
return base ** exponent
Нажмите Enter на пустой строке, а затем протестируйте оба вызова:
print(power(3))
print(power(3, 3))
Вы должны увидеть следующий вывод:
9
27
Здесь, если показатель степени не указан, функция использует 2 в качестве значения по умолчанию.
Функции могут возвращать несколько значений с помощью кортежей. Сначала определите функцию:
def min_max(numbers):
return min(numbers), max(numbers)
Нажмите Enter на пустой строке, а затем вызовите функцию:
minimum, maximum = min_max([1, 5, 3, 9, 2])
print(f"Minimum: {minimum}, Maximum: {maximum}")
Вы должны увидеть следующий вывод:
Minimum: 1, Maximum: 9
Эта функция возвращает как минимальное, так и максимальное значения из списка чисел.
Помните, что отступы в Python критически важны. Тела функций должны иметь последовательные отступы.
Понимание области видимости функций
На этом этапе вы узнаете об области видимости функций и о том, как ведут себя переменные внутри и вне функций.
В интерпретаторе Python давайте исследуем локальные и глобальные переменные:
x = 10 ## Глобальная переменная
def print_x():
print(f"Global x: {x}")
print_x()
def change_x():
x = 20 ## Локальная переменная
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 была изменена.
Функции также могут обращаться к переменным из их объемлющей области видимости:
def outer_function(x):
def inner_function():
print(f"x from outer function: {x}")
inner_function()
outer_function(40)
Вы должны увидеть следующий вывод:
x from outer function: 40
Внутренняя функция может получить доступ к параметру 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 в редакторе WebIDE и добавьте следующее содержимое:
## use_math_module.py
import math_operations
result_add = math_operations.add(5, 3)
result_subtract = math_operations.subtract(10, 4)
result_multiply = math_operations.multiply(2, 6)
result_divide = math_operations.divide(15, 3)
print(f"Addition: {result_add}")
print(f"Subtraction: {result_subtract}")
print(f"Multiplication: {result_multiply}")
print(f"Division: {result_divide}")
print(f"Value of PI: {math_operations.PI}")
Этот скрипт импортирует модуль 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 автоматически обрабатывает компиляцию и кэширование модулей.
Импорт конкретных функций из модулей
На этом этапе вы узнаете, как импортировать конкретные функции из модулей и использовать псевдонимы, чтобы сделать ваш код более лаконичным.
Создайте новый файл с именем advanced_math.py в каталоге ~/project:
touch ~/project/advanced_math.py
Откройте advanced_math.py в редакторе WebIDE и добавьте следующее содержимое:
## advanced_math.py
import math
def square_root(x):
return math.sqrt(x)
def power(base, exponent):
return math.pow(base, exponent)
def sin(angle):
return math.sin(math.radians(angle))
def cos(angle):
return math.cos(math.radians(angle))
Этот модуль использует встроенный модуль Python math для предоставления более продвинутых математических операций.
Теперь создайте файл с именем use_advanced_math.py в том же каталоге:
touch ~/project/use_advanced_math.py
Откройте use_advanced_math.py в редакторе WebIDE и добавьте следующее содержимое:
## 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:
touch ~/project/geometry/__init__.py
touch ~/project/geometry/shapes.py
Файл __init__.py необходим для того, чтобы Python воспринимал каталог как пакет. Он может быть пустым или содержать код инициализации пакета.
Откройте shapes.py в редакторе WebIDE и добавьте следующее содержимое:
## geometry/shapes.py
import math
def circle_area(radius):
return math.pi * radius ** 2
def rectangle_area(length, width):
return length * width
def triangle_area(base, height):
return 0.5 * base * height
Теперь создайте файл с именем use_geometry_package.py в каталоге ~/project:
touch ~/project/use_geometry_package.py
Откройте use_geometry_package.py в редакторе WebIDE и добавьте следующее содержимое:
## 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, вы обнаружите, что эти навыки необходимы для создания более сложных программ и совместной работы над крупными проектами. Не забывайте регулярно практиковать эти концепции и исследовать обширную экосистему модулей и пакетов Python, доступных для расширения ваших возможностей программирования.



