Функции и модули в Python

PythonBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите две фундаментальные концепции программирования на Python: функции и модули. Функции позволяют организовывать код в повторно используемые блоки, делая программы более модульными и понятными. Модули позволяют группировать связанные функции и переменные в отдельные файлы, что способствует повторному использованию и удобству сопровождения кода. Освоив эти концепции, вы сможете писать более эффективный и структурированный код на 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.

Интерфейс 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, доступных для расширения ваших возможностей программирования.