<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Структуры данных и функции on kodkod | Вводный курс</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/</link><description>Recent content in Структуры данных и функции on kodkod | Вводный курс</description><generator>Hugo</generator><language>ru</language><copyright>מבואות קודקוד</copyright><atom:link href="https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/index.xml" rel="self" type="application/rss+xml"/><item><title>list: создание, доступ, добавление, удаление, поиск и перебор</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/01-list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/01-list/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;list&lt;/strong&gt; (список) — самая распространённая структура данных в Python. Мы уже коротко им пользовались. Сегодня изучим его как следует:&lt;/p&gt;</description></item><item><title>tuple и set: фиксированная запись и коллекция без повторов</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/02-tuple-and-set/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/02-tuple-and-set/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;p&gt;Ещё две структуры данных, у каждой своя «суперсила»:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;tuple&lt;/strong&gt; (кортеж) — как список, но &lt;strong&gt;фиксированный&lt;/strong&gt;: после создания его нельзя изменить.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;set&lt;/strong&gt; (множество) — коллекция &lt;strong&gt;без повторов&lt;/strong&gt; и без порядка, которая позволяет очень быстро проверить, есть ли в ней значение.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="зачем-это-нужно"&gt;Зачем это нужно?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;tuple&lt;/strong&gt; подходит для данных, которые представляют &lt;strong&gt;одну запись с фиксированной структурой&lt;/strong&gt;: точка &lt;code&gt;(x, y)&lt;/code&gt;, дата &lt;code&gt;(2026, 10, 6)&lt;/code&gt;, строка из базы данных &lt;code&gt;(7, &amp;quot;Dana&amp;quot;, 24)&lt;/code&gt;. В темах бэкенда и баз данных &lt;strong&gt;каждая строка, которая возвращается из базы данных, будет приходить как tuple!&lt;/strong&gt; Неизменяемость гарантирует, что никакой код не изменит запись «по ошибке».&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;set&lt;/strong&gt; подходит для случаев, когда нужна &lt;strong&gt;уникальность&lt;/strong&gt;: сколько &lt;strong&gt;разных&lt;/strong&gt; пользователей зашло сегодня на сайт? Какие теги у поста? Кто записан сразу на два курса?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="объяснение-с-основ"&gt;Объяснение с основ&lt;/h2&gt;
&lt;h3 id="tuple"&gt;tuple&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;tuple&lt;/strong&gt; — &lt;strong&gt;упорядоченная&lt;/strong&gt; последовательность значений, &lt;strong&gt;которую нельзя изменить&lt;/strong&gt; (Immutable). После создания нельзя добавлять, удалять или заменять элементы.&lt;/p&gt;</description></item><item><title>dict: ключ и значение</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/03-dict/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/03-dict/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;dict&lt;/strong&gt; (Dictionary, словарь) — структура, которая хранит &lt;strong&gt;пары из ключа и значения&lt;/strong&gt;. Вместо доступа по позиции (&lt;code&gt;[0]&lt;/code&gt;) обращаются по &lt;strong&gt;имени&lt;/strong&gt; (&lt;code&gt;[&amp;quot;name&amp;quot;]&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Срезы, изменяемые и неизменяемые типы, is и ==</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/04-slicing-mutability-identity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/04-slicing-mutability-identity/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Срезы&lt;/strong&gt; (Slicing) — как вырезать часть списка, tuple или строки.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Изменяемые&lt;/strong&gt; (Mutable) и &lt;strong&gt;неизменяемые&lt;/strong&gt; (Immutable) типы — что можно изменить, а что нельзя, и почему это важно.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ссылки&lt;/strong&gt; (references) — что происходит, когда вы пишете &lt;code&gt;b = a&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;is&lt;/code&gt; и &lt;code&gt;==&lt;/code&gt;&lt;/strong&gt; — «одно и то же значение» и «абсолютно тот же объект».&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="зачем-это-нужно"&gt;Зачем это нужно?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Срезы&lt;/strong&gt; встречаются повсюду: первые 10 результатов, последние 3 символа номера карты (&lt;code&gt;****1234&lt;/code&gt;), «страница 2» списка.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Изменяемость&lt;/strong&gt; — источник одного из самых запутанных багов в Python: «Я изменил один список, и вдруг изменился и второй!». Понимание этой темы экономит часы отладки. А в теме ООП объекты классов ведут себя именно так.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="объяснение-с-основ"&gt;Объяснение с основ&lt;/h2&gt;
&lt;h3 id="срезы"&gt;Срезы&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Срез&lt;/strong&gt; (Slicing) создаёт &lt;strong&gt;новую последовательность&lt;/strong&gt; из части существующей:&lt;/p&gt;</description></item><item><title>Функции подробно: значения по умолчанию, функции как объекты, *args, **kwargs и lambda</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/05-functions-args-kwargs-lambda/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/05-functions-args-kwargs-lambda/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;p&gt;В теме чистого кода и отладки мы изучили основы: &lt;code&gt;def&lt;/code&gt;, параметры, &lt;code&gt;return&lt;/code&gt;. Сегодня изучим несколько возможностей, которые делают функции намного гибче:&lt;/p&gt;</description></item><item><title>Область видимости: Local, Enclosing, Global и Built-in (LEGB)</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/06-scope-legb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/06-scope-legb/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Scope&lt;/strong&gt; (область видимости) = &lt;strong&gt;область кода, где известно имя (переменной или функции)&lt;/strong&gt;. Мы изучим:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Local&lt;/strong&gt; — переменные внутри функции.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enclosing&lt;/strong&gt; — переменные внешней функции, когда есть функция внутри функции.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global&lt;/strong&gt; — переменные на верхнем уровне файла.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in&lt;/strong&gt; — встроенные имена Python (&lt;code&gt;print&lt;/code&gt;, &lt;code&gt;len&lt;/code&gt;&amp;hellip;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LEGB&lt;/strong&gt; — порядок, в котором Python ищет имя.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="зачем-это-нужно"&gt;Зачем это нужно?&lt;/h2&gt;
&lt;p&gt;Если бы каждая переменная была доступна отовсюду, переменная &lt;code&gt;total&lt;/code&gt; в одной функции перезаписывала бы переменную &lt;code&gt;total&lt;/code&gt; в другой, и в программе на 10 000 строк был бы хаос. Область видимости &lt;strong&gt;изолирует&lt;/strong&gt; каждую функцию: она может использовать свои имена, не боясь столкновений.&lt;/p&gt;</description></item><item><title>Чистые функции и побочные эффекты</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/07-pure-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/07-pure-functions/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Что такое &lt;strong&gt;чистая функция&lt;/strong&gt; (Pure Function).&lt;/li&gt;
&lt;li&gt;Что такое &lt;strong&gt;побочный эффект&lt;/strong&gt; (Side Effect) и какие они бывают.&lt;/li&gt;
&lt;li&gt;Ловушку &lt;strong&gt;изменения списка, полученного как параметр&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Как написать &lt;strong&gt;чистую версию&lt;/strong&gt; функции.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="зачем-это-нужно"&gt;Зачем это нужно?&lt;/h2&gt;
&lt;p&gt;Вот функция, которая выглядит невинно:&lt;/p&gt;</description></item><item><title>Функции высшего порядка: функции, которые получают и возвращают функции</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/08-higher-order-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/08-higher-order-functions/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Что такое &lt;strong&gt;функция высшего порядка&lt;/strong&gt; (Higher-Order Function).&lt;/li&gt;
&lt;li&gt;Как &lt;strong&gt;передать функцию как параметр&lt;/strong&gt; — и почему без скобок.&lt;/li&gt;
&lt;li&gt;Встроенные функции &lt;strong&gt;&lt;code&gt;map&lt;/code&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Параметр &lt;strong&gt;&lt;code&gt;key&lt;/code&gt;&lt;/strong&gt; в &lt;code&gt;sorted&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt; и &lt;code&gt;min&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Функцию, которая возвращает функцию&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="зачем-это-нужно"&gt;Зачем это нужно?&lt;/h2&gt;
&lt;p&gt;Две почти одинаковые функции:&lt;/p&gt;</description></item><item><title>Вложенные функции, замыкания и nonlocal</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/09-nested-functions-nonlocal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/09-nested-functions-nonlocal/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Вложенную функцию&lt;/strong&gt; (Nested Function) — функцию, определённую внутри функции.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enclosing&lt;/strong&gt; — букву E в LEGB, вблизи.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Замыкание&lt;/strong&gt; (Closure) — функцию, которая «помнит» переменные.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;nonlocal&lt;/code&gt;&lt;/strong&gt; — как изменить переменную объемлющей функции.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="зачем-это-нужно"&gt;Зачем это нужно?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Приватная вспомогательная функция:&lt;/strong&gt; иногда функции нужна маленькая вспомогательная функция, которая принадлежит &lt;strong&gt;только&lt;/strong&gt; ей. Нет причин делать её глобальной и смешивать с остальным кодом.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Функции, которые помнят состояние:&lt;/strong&gt; в предыдущем уроке мы видели, что &lt;code&gt;make_multiplier(2)&lt;/code&gt; возвращает функцию, которая «помнит» число 2. Сегодня поймём, как это работает, — и как построить счётчик, накопитель или кэш &lt;strong&gt;без&lt;/strong&gt; &lt;code&gt;global&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="объяснение-с-основ"&gt;Объяснение с основ&lt;/h2&gt;
&lt;h3 id="функция-внутри-функции"&gt;Функция внутри функции&lt;/h3&gt;
&lt;p&gt;Можно определить &lt;code&gt;def&lt;/code&gt; внутри &lt;code&gt;def&lt;/code&gt;. Внутренняя функция:&lt;/p&gt;</description></item><item><title>Декораторы: добавляем поведение функции, не трогая её</title><link>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/10-decorators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intro-kodkod-6.nm-ambition.com/ru/docs/python-data-functions/10-decorators/</guid><description>&lt;h2 id="что-мы-изучим"&gt;Что мы изучим?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Что такое &lt;strong&gt;декоратор&lt;/strong&gt; (Decorator) и чем он полезен.&lt;/li&gt;
&lt;li&gt;Как построить декоратор: функция, которая получает функцию и возвращает &lt;strong&gt;обёртку&lt;/strong&gt; (wrapper).&lt;/li&gt;
&lt;li&gt;Синтаксис &lt;strong&gt;&lt;code&gt;@&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Обёртку, подходящую для &lt;strong&gt;любой&lt;/strong&gt; функции, с &lt;code&gt;*args&lt;/code&gt; и &lt;code&gt;**kwargs&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="зачем-это-нужно"&gt;Зачем это нужно?&lt;/h2&gt;
&lt;p&gt;Мы хотим печатать сообщение при каждом вызове функции — для отладки:&lt;/p&gt;</description></item></channel></rss>