Главная страница » Python » 38. Детерминированность
Добро пожаловать на тридцать восьмой урок по Python! В этом уроке мы рассмотрим понятие детерминированности в программировании и его важность для написания надежных и воспроизводимых программ. Мы обсудим, что такое детерминированность, как она влияет на выполнение кода и как вы можете обеспечить её в своих программах.
В программировании детерминированность означает, что результат выполнения программы или функции всегда один и тот же при одинаковых входных данных. В детерминированной программе или функции, если вы передаете те же аргументы, вы всегда получите одинаковый результат.
Пример детерминированной функции
def add(a, b):
return a + b
print(add(3, 4)) # Вывод: 7
print(add(3, 4)) # Вывод: 7 (всегда одинаковый результат для одинаковых входных данных)
Функция add
детерминирована, потому что для одного и того же набора входных значений (3 и 4) результат всегда будет 7.
Некоторые функции или программы могут вести себя недетерминированно, то есть они могут давать разные результаты для одинаковых входных данных. Это может быть связано с несколькими факторами:
Использование случайных чисел
import random
def random_number():
return random.randint(1, 10)
print(random_number()) # Вывод может быть разным каждый раз
print(random_number()) # Вывод может быть разным каждый раз
Функция random_number
недетерминирована, потому что возвращает случайное число, которое может меняться при каждом вызове.
Зависимость от состояния системы
import datetime
def current_time():
return datetime.datetime.now()
print(current_time()) # Вывод изменится в зависимости от времени вызова
print(current_time()) # Вывод изменится в зависимости от времени вызова
Функция current_time
недетерминирована, потому что результат зависит от текущего времени системы, которое меняется.
Взаимодействие с внешними ресурсами
import requests
def get_website_status(url):
response = requests.get(url)
return response.status_code
print(get_website_status("https://www.example.com")) # Код состояния может меняться
print(get_website_status("https://www.example.com")) # Код состояния может меняться
Функция get_website_status
может быть недетерминированной, так как результат зависит от состояния веб-сайта, который может изменяться.
Повторяемость результатов: Детерминированные функции позволяют легко отлаживать и тестировать программы, так как вы можете предсказать результаты выполнения функции для конкретных входных данных.
Консистентность: Детерминированность помогает поддерживать консистентность данных и поведения программы, особенно в системах, где важна точность и стабильность.
Удобство для тестирования: Тестирование детерминированного кода проще, так как вы можете создать тесты с конкретными входными данными и проверять, что результат всегда соответствует ожиданиям.
Избегайте случайных чисел: Если вам нужно использовать случайные числа, попробуйте сделать их предсказуемыми с помощью фиксированного начального значения (seed) для генератора случайных чисел.
import random
def deterministic_random(seed):
random.seed(seed)
return random.randint(1, 10)
print(deterministic_random(42)) # Всегда будет один и тот же результат для одного и того же seed
Избегайте зависимостей от времени: Если функция зависит от текущего времени, она может стать недетерминированной. Попробуйте передавать время как аргумент функции или использовать фиксированное время для тестирования.
def fixed_time():
return datetime.datetime(2024, 1, 1, 12, 0, 0)
print(fixed_time()) # Всегда возвращает одно и то же время
Учитывайте внешние ресурсы: Если функция взаимодействует с внешними ресурсами, старайтесь минимизировать влияние этих ресурсов на результат функции. Например, используйте моки или заглушки в тестах.
def mock_get_website_status(url):
return 200
print(mock_get_website_status("https://www.example.com")) # Всегда возвращает 200
Сегодня вы узнали о детерминированности в Python, важности её соблюдения для обеспечения предсказуемости и стабильности программ, а также способах обеспечения детерминированности в коде. Детерминированные функции помогают улучшить тестируемость и надежность вашего кода.
Наша цель и главная задача сделать качественное образование в вашем браузере
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024 Все права защищены. CodeFor.