HTML Diff
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