В социалистическом обществе корпоративная культура должна строиться на принципах коллективизма, взаимопомощи и солидарности. Работники должны ощущать себя частью единого коллектива, объединенного общей целью - служению интересам трудящихся.
Корпоративная культура призвана способствовать развитию творческой инициативы каждого работника, раскрытию его способностей на благо всего коллектива. Вместе с тем, интересы коллектива должны стоять выше личных интересов отдельного работника.
Важно поощрять взаимопомощь, обмен знаниями и опытом между работниками. Недопустима конкуренция и интриги. Каждый должен быть готов подставить плечо товарищу.
(С) ЛЕНИН, модель ИИ от группы «Свободное время».
Напишем краткое введение в основы программирования на Python с помощью больших языковых моделей (LLM). В принципе с этой задачей можно было справиться ограничившись одной, наиболее известной — ChatGPT. Однако альтернативные варианты, такие как YandexGPT и особенно компактные GGML модели для локального инференса продолжают оставаться в поле моего внимания. Прежде всего потому что, на мой взгляд, нельзя допускать сильную зависимость от технологий удалённых вычислений, ведь они могут перестать быть для нас доступными в любой момент. Локальные же будут работать столько, сколько понадобится нам самим. Пока что они значительно уступают своим старшим собратьям, но не исключено, что в будущем будут найдены подходы, позволяющие сделать из них действительно полезные инструменты.
Мне кажется для локального инференса нужно идти немного другим путём и создавать не большие языковые модели обученные на широком круге тем, а более узко специализированные — по математике, физике, химии, биологии, медицине и т. д. Также упрощённую модель общего назначения, которая не будет перегружена этими специальными знаниями, но будет обучена диалоговому общению на человеческом языке и извлечению из него запросов. Тогда можно было бы развернуть разные модели на разных устройствах, в том числе однопалатных компьютерах и смартфонах и адресовать разные запросы разным моделям в сети, а затем моделью общего назначения собирать их в единое целое по правилам построения связанного текста. Это должен быть сплав технологий IPv6, сетей точка-точка (P2P 1, 2). Нагрузка в такой сети будет распределена и практически незаметна для участников. Сеть будет существовать столько, сколько нужно самим участникам и не зависеть ни от какой политической и экономической конъюнктуры.
Но хватит витать в облаках. Перейдём к делу. Сегодня я поработаю дирижёром оркестра из 7 моделей чтобы очень сжато охватить те синтаксические конструкции Python, которые позволят (подглядывая в справочники и мануалы) сразу же приступить к практическому освоению этого языка. То, что в нормальном учебнике повествуется на страницах 200-300 у нас уместилось на 5. Итак...
Краткое введение в программирование на Python
Что такое Python
Python - это интерпретируемый, объектно-ориентированный язык программирования высокого уровня. Он был создан Гвидо ван Россумом в конце 1980-х годов и к настоящему времени используется для широкого спектра приложений, от веб-разработки и научных вычислений до анализа данных и машинного обучения. Простой синтаксис Python и его легкость чтения делают его отличным выбором как для начинающих, так и для опытных программистов. Он имеет большую стандартную библиотеку, которая предоставляет встроенные функции для всего: от обработки файлов до сетевого программирования, что делает его универсальным языком, подходящим для решения множества задач. [1]
С чего начать - с изучения синтаксиса языка
Изучение любого языка следует начинать с его синтаксиса — правил, определяющих, как следует писать код. В Python это прежде всего отступы, пробелы, комментарии и соглашения об именах переменных. Отступы используются для определения блоков кода, а пробелы имеют значение для улучшения читаемости кода. В код можно добавить комментарии, чтобы предоставить пояснения для себя и других людей, которым может потребоваться понять то что вы написали. Наконец, в Python существуют соглашения об именах переменных, следование которым помогают сделать ваш код более удобным в сопровождении.[2]
Блоки
Каждый блок кода должен иметь отступ в четыре пробела или одну табуляцию. В базовом текстовом редакторе за этим необходимо следить самостоятельно, но многие современные редакторы могут делать это автоматически. Правильное разделение кода на блоки с помощью отступов имеет важное значение для корректного выполнения кода. [5]
Комментарии
В Python существует два типа комментариев: однострочные и блочные.
Однострочные комментарии начинаются с символа # и продолжаются до конца строки. Они используются для документирования кода и игнорируются интерпретатором.
Блочные комментарии используются для комментирования нескольких строк кода и заключаются между последовательностями из трёх одинарных или двойных кавычек. Всё, что находится между этими комбинациями символов, считается комментарием и игнорируется интерпретатором. [7]
Переменные
Переменные — это именованные ячейки памяти, в которых хранятся значения данных. В Python переменные объявляются, когда им впервые присваивается значение. Имена переменных могут состоять из любой комбинации букв, цифр и символов подчёркивания (_), но они должны начинаться с буквы или символа подчёркивания. Имена переменных чувствительны к регистру. Это означает что, например dog и Dog будут считаться двумя разными переменными. Переменные изменяемы - их значение может изменяться с течением времени. Переменные ограничены областью действия - доступ к ним возможен только в пределах той области, в которой они были определены. [1]
Имена переменных должны быть уникальными в пределах области действия (функций, класса или модуля). Для сохранения значения в переменной нужно указать её имя, за которым должен следовать знак равенства и значение. Например, x = 5. Эта операция называется присвоением значения 5 переменной x. [5]
Рассмотрим пример. Допустим, у нас есть коробки с яблоками и апельсинами. Вы можете назвать их «box1» и «box2». Если вы хотите знать, сколько всего у вас фруктов, вы просто считываете значения из переменных и считаете их сумму. В Python мы это делаем следующим образом [4]:
Операторы
Знак «=» называется оператором присваивания. Операторы — это специальные лексемы (слова или символы), которые интерпретируются как команды для выполнения операций над значениями и переменными.
Если выполняемые операции арифметические, то операторы называются арифметическими.
Примеры арифметических операторов:
сложение (+), вычитание (-), умножение (*), деление (/), целочисленное деление (//), остаток от деления (%), возведение в степень (**), побитовый сдвиг влево (<<), побитовый сдвиг вправо (>>).
Если выполняемые операции сравнения, то операторы называются операторами сравнения.
Примеры операторов сравнения:
равно (==), не равно (!=), больше (>), меньше (<), больше или равно (>=), меньше или равно (<=).
Другие виды операторов.
Логические:
логическое И (and) — возвращает True, если оба операнда являются истинными и False если хотя бы один является ложным; логическое ИЛИ (or) — возвращает True, если хотя бы один из операндов является истинным и False если оба являются ложными; логическое НЕ (not) — возвращает True, если операнд является ложным и False, если операнд является истинным; побитовое И (&); побитовое ИЛИ (|); исключающее ИЛИ (^).
Присваивания:
присваивание (=); прибавление и присваивание (+=) - прибавляет значение правого операнда к левому операнду и присваивает результат левому операнду и присваивает результат левому операнду; умножение и присваивание(*=); деление и присваивание (/=); целочисленное деление и присваивание (//=), остаток от деления и присваивание (%=)
Принадлежности и идентичности:
принадлежит (in) — возвращает True, если значение принадлежит последовательности; не принадлежит (not in) — возвращает True, если значение не принадлежит последовательности;
is (идентичен) — возвращает True, если два объекта являются одним и тем же объектом;
is not (не идентичен) — возвращает True, если два объекта не являются одним и тем же объектом. [2, 4, 6]
Выражения и инструкции
Последовательности символов, представляющих значение или вычисление образуют выражения. Например, оператор присваивания создаёт новую привязку для переменной, в то время как операторы других типов (вызовы функций, циклы) выполняют некоторую операцию, а затем возвращают управление вызывающей стороне. [3]
Инструкции управляют потоком программы и могут включать выражения. Например, инструкция if может иметь выражение для проверки условия. Вот пример программы, демонстрирующей использование выражений и инструкций [7]:
Типы данных
Данные, с которыми работают в Python, могут быть различных типов. Чаще всего это: целые числа (integer), числа с плавающей точкой (float), логические (boolean), строковые (string), кортежи (tuple), списки (list), моножества (set) и словари (dictionary).
Кортежи
Кортежи в Python — это неизменяемые последовательности элементов. Их можно использовать для хранения вязанных данных, которые должны оставаться неизменными во всём коде. Вот пример программы, которая создаёт и распечатывает кортеж, содержащий два целых числа[2]:
Списки
Списки — это упорядоченные коллекции элементов, которые можно динамически изменять, добавляя или удаляя элементы. Они полезны для хранения связанных данных, которые должны оставаться упорядоченными и легко доступными в вашем коде. Вот пример программы, которая создаёт, изменяет и распечатывает список, содержащий целые числа [2]:
Множества
Множества — это неупорядоченные коллекции уникальных элементов, похожие на списки, но без повторяющихся значений. Их можно использовать для хранения связанных данных, которые должны оставаться уникальными и быть легко доступными в вашем коде. Вот пример программы, которая создаёт и распечатывает набор, содержащий целые числа [2, 4]:
Словари
Словарь (также известный как ассоциативный массив или хеш-таблица) представляет собой набор пар ключ-значение. Каждому ключу соответствует значение, подобно тому, как слова в глоссарии сопоставляются с определениями. Словари обычно используются для хранения и извлечения данных во многих языках программирования, включая Python.
В Python есть несколько встроенных функций, которые позволяют нам манипулировать словарями. Вот простой пример программы, демонстрирующий некоторые из этих функций [3]:
Управление потоком
Управление потоком означает способность языка программирования определять порядок выполнения кода. В Python существует несколько способов управления потоком выполнения, включая использование циклов и условных операторов. Вот пример программы, демонстрирующей некоторые распространённые структуры управления потоком в Python [3]:
Исключения
Исключения (exceptions) — это особые ситуации, которые могут возникнуть во время выполнения программы, например, попытка деления числа на ноль. Когда возникает исключение, программа прерывает свою обычную работу и выполняет специальный блок кода — блок обработки исключений. Рассмотрим на примере [7]:
Циклы
Циклы используются для многократного выполнения блока кода до тех пор, пока не будет выполнено определённое условие. В Python существует два типа циклов: for и while.
Цикл For
Цикл for используется для перебора последовательности (например, списка, кортежа, строки) или других итерируемых объектов. Он позволяет выполнять набор операторов для каждого элемента последовательности. Синтаксис цикла for в Python следующий:
for item in sequence:
#код для перебора каждого элемента
Переменная цикла item принимает значение каждого элемента последовательности по одному, и блок кода с отступом выполняется для каждой итерации.
Цикл while
Цикл while используется для многократного выполнения блока кода, пока выполняется определённое условие. Он позволяет выполнять набор операторов до тех пор, пока условие не станет ложным. Синтаксис цикла while следующий:
while condition:
#код, который будет выполняться пока условие condition истинно
Условие оценивается перед каждой итерацией, и если оно истино, блок кода с отступом выполняется. Цикл продолжается до тех пор, пока условие не станет ложным.
Управление циклами
Python предоставляет несколько операторов управления циклом, которые позволяют вам управлять потоком выполнения внутри цикла:
break — завершает цикл и передаёт управление следующему оператору после цикла;
continue — пропускает оставшуюся часть текущей итерации и переходит к следующей итерации;
pass — действует как заполнитель и ничего не делает (используется, когда оператор необходим синтаксически, но вы не хотите выполнять какой-либо код) [6]
Функции
Части кода можно переносить из основной программы в подпрограммы (функции). Это фундаментальная концепция Python, которая позволяет писать модульный код, пригодный для повторного использования. Применение Функций улучшает читаемость кода и повышает удобство его сопровождения. Определив функции, вы можете разбить сложные задачи на более мелкие и более управляемые фрагменты кода.
Чтобы определить функцию в Python, вы можете использовать ключевое слово def, за которым следует имя функции, круглые скобки и двоеточие. Следующий блок кода будет содержать инструкции функции.
Вот пример простой функции, которая складывает два числа и возвращает результат:
def add_numbers(a, b):
return a + b
В этом примере функция называется add_numbers и она принимает два параметра — a и b. Оператор return используется для указания значения, которое должна вывести функция.
После определения функции вы можете вызвать её, используя её имя, за которым следуют круглые скобки. Если функция принимает какие-либо параметры, вы можете передать их в круглых скобках.
Вот пример вызова функции add_numbers, которую мы определили ранее:
result = add_nubers(5, 7)
print (result).
В этом примере мы передаём аргументы 5 и 7 в функцию add_numbers. Функция вычисляет сумму двух чисел и возвращает результат. Наконец, результат присваивается переменной result печатается.
Python позволяет определять функции со значениями параметров по умолчанию. Это означает, что если параметр не указан при вызове функции, будет использоваться значение по умолчанию, указанное в определении функции.
Вот пример:
В этом примере функция приветствия имеет имя параметра по умолчанию «Anonymous». Если при вызове функции не указан аргумент, будет использовано это значение. В противном случае будет подставлено значение предоставленного аргумента. [6]
Методы
Функции, связанные с объектом или классом называются методами. Они позволяют выполнять операции с объектами в программе, например изменять их свойства или получать информацию о них. Чтобы получить доступ к методам с использованием точечной нотации, мы просто вызываем имя метода, после имени объекта, которому он принадлежит, отделяя их друг от друга точкой. Вот пример программы, демонстрирующей доступ к методу с использованием точечной нотации. [7]
С помощью модулей и пакетов мы можем ещё лучше организовать свой код и сделать его пригодным для повторного использования.
Модули и пакеты
Модули — это файлы с кодом, которые можно использовать в своих программах. Они позволяют разделить программу на логические части и сделать её более понятной и простой в поддержке и изменении.
Пакеты в Python — это коллекции модулей, связанные общей темой. Они обычно организованы в иерархическую структуру каталогов на диске, где каждый уровень соответствует определённой категории. Пакеты позволяют организовать модули в более крупные структуры и упростить их поиск и использование.
Вот пример программы, использующей модуль:
Примером пакета может служить стандартная библиотека Python, которая содержит множество модулей для работы с различными аспектами языка и программирования. Туда входят функции работы с файлами, обработка текста, работа с датой и временем и т. д. Всего более 200 модулей [7].
Коллектив авторов:
[1] Mistral-7B,
[2] Mythologic-13B,
[3] Wizard-Vicuna-30B,
[4] Openchat_3.5-16k,
[5] StableBeluga2,
[6] ChatGPT 3.5,
[7] YandexGPT 2.