0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: python, _sum, чистая функция, детерминированная функция, _weighed_sum, переменная weight, _save_sum_to_database, randint, web-разработка, web dev</p>
1
<p>Теги: python, _sum, чистая функция, детерминированная функция, _weighed_sum, переменная weight, _save_sum_to_database, randint, web-разработка, web dev</p>
2
<p>Для начала, вспомним каждое из определений. Чистая функция - это функция, которая не имеет побочных эффектов и для фиксированного набора аргументов возвращает один и тот же результат. Давайте посмотрим на пару примеров.</p>
2
<p>Для начала, вспомним каждое из определений. Чистая функция - это функция, которая не имеет побочных эффектов и для фиксированного набора аргументов возвращает один и тот же результат. Давайте посмотрим на пару примеров.</p>
3
<h2>Чистые функции</h2>
3
<h2>Чистые функции</h2>
4
<p>Вот функция<strong>_sum</strong>:</p>
4
<p>Вот функция<strong>_sum</strong>:</p>
5
def _sum(a, b): return a + b<p>Результат её работы не зависит ни от чего, кроме аргументов, и не делает ничего с окружающей средой.</p>
5
def _sum(a, b): return a + b<p>Результат её работы не зависит ни от чего, кроме аргументов, и не делает ничего с окружающей средой.</p>
6
<p>А вот<strong>_weighed_sum</strong>:</p>
6
<p>А вот<strong>_weighed_sum</strong>:</p>
7
def _weighed_sum(a, b): return a * WEIGHT + b<p>Эта функция "грязная": результат её работы кроме<strong>"a и b"</strong>зависит ещё от глобальной<strong>переменной WEIGHT</strong>. Получается, если мы зафиксируем значения аргументов функции, мы не сможем гарантировать, что результат всегда будет один и тот же.</p>
7
def _weighed_sum(a, b): return a * WEIGHT + b<p>Эта функция "грязная": результат её работы кроме<strong>"a и b"</strong>зависит ещё от глобальной<strong>переменной WEIGHT</strong>. Получается, если мы зафиксируем значения аргументов функции, мы не сможем гарантировать, что результат всегда будет один и тот же.</p>
8
<p>Теперь посмотрим на _save_sum_to_database:</p>
8
<p>Теперь посмотрим на _save_sum_to_database:</p>
9
def _save_sum_to_database(a, b, cursor): result = a + b cursor.execute(“INSERT INTO sum_results (result) VALUES (%s)”, result)<p>Эта функция тоже "грязная": она использует базу данных и результат её работы зависит от БД. Функция будет вести себя по-разному, если БД доступна и недоступна.</p>
9
def _save_sum_to_database(a, b, cursor): result = a + b cursor.execute(“INSERT INTO sum_results (result) VALUES (%s)”, result)<p>Эта функция тоже "грязная": она использует базу данных и результат её работы зависит от БД. Функция будет вести себя по-разному, если БД доступна и недоступна.</p>
10
<p><strong>С чистыми функциями разобрались!</strong>Они используют только свои аргументы, не ходят во "внешний мир" и гарантируют один и тот же результат при тех же аргументах.</p>
10
<p><strong>С чистыми функциями разобрались!</strong>Они используют только свои аргументы, не ходят во "внешний мир" и гарантируют один и тот же результат при тех же аргументах.</p>
11
<h2>Теперь вспомним, что такое детерминированные функции</h2>
11
<h2>Теперь вспомним, что такое детерминированные функции</h2>
12
<p>С ними всё проще: детерминированные функции возвращают один и тот же результат для одних и тех же аргументов. В общем случае детерминированный алгоритм - это алгоритм, поведение которого можно полностью предсказать по входным данным.</p>
12
<p>С ними всё проще: детерминированные функции возвращают один и тот же результат для одних и тех же аргументов. В общем случае детерминированный алгоритм - это алгоритм, поведение которого можно полностью предсказать по входным данным.</p>
13
<p>Простой пример недетерминированной функции -<strong>randint</strong>. Входные аргументы мы знаем, а результат - нет.</p>
13
<p>Простой пример недетерминированной функции -<strong>randint</strong>. Входные аргументы мы знаем, а результат - нет.</p>
14
<p>Если внимательно посмотреть на определения чистых и детерминированных функций, то станет понятно, что чистые функции - подмножество детерминированных.</p>
14
<p>Если внимательно посмотреть на определения чистых и детерминированных функций, то станет понятно, что чистые функции - подмножество детерминированных.</p>
15
<p><strong>Это важный вывод:</strong>зная это, становится проще понимать свойства разных кусков кода и делать их чище.</p>
15
<p><strong>Это важный вывод:</strong>зная это, становится проще понимать свойства разных кусков кода и делать их чище.</p>
16
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
16
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
17
17