Перейти к содержанию

Типы данных

Базовые типы

Название объекта Формат записи Пример
Целое число <Число> 42
Число с плавающей точкой <Число>.<Число> 3.1415
Строка '<Выражение>' 'Я-Строка'
Логический тип [ True, False, Истина, Ложь ] True
Дата <ДД>.<ММ>.<ГГГГ> 01.02.2022
Пустой элемент [ Null, None, Пусто ] None
Комментарий # <Любое количество элементов до конца строки>или/ <Любое количество элементов> / # я - однострочный комментарий
/ а я - многострочный комментарий /

Операции над базовыми типами

Для базовых типов доступны базовые операции блока, за исключением присваивания.

Массив

[4, 8.16, '23,' 4+2]
Массив представляет собой набор произвольных объектов выражения [ <Выражение1>,...,<ВыражениеN> ]

Динамическое создание массива

[ <Выражение> [ for | для ] <Переменная> [ in | в ] <Данные> (Не обязательно [ if | если ] <Условие>) ]
  • Выражение и Условие могут содержать в себе Переменную.
  • Данные могут быть любым итерируемым типом данных.
  • В Условие используются базовые операции, возвращающий Логический тип данных.
Пример
    [ i + 1 for i in [-1, 1, -2, 2, -3, 3] if i < 0 ] → [0, -1, -2]

Операции над массивами

Для массивов доступны базовые операции блока, за исключением присваивания. При условии, что вторым операндом является базовый объект. В таком случае, для каждого элемента массива будет проведена своя операция:

[1, 2, 3, 4, 5] - 5 → [-4, -3, -2, -1, 0]

  • Если при выполнении операции, какой-либо элемент выдаст ошибку, то вся операция будет завершена с ошибкой.
  • Операции над двумя массивами приведут к ошибке.

Получение элемента массива

Получение элемента массива происходит по его индексу:

[10, 20, 30, 40][0] → 10

  • Индекс элемента начинается с нуля
  • Индекс является целым числом
  • В качестве индекса может использоваться выражение, только при условии, что результатом этого выражения будет целое число:
    [10, 20, 30, 40][1+1] → 30
    

Словарь

{ 
    <Ключ1>: <Выражение1>,
    ..., 
    <КлючN>: <ВыражениеN> 
}

Словарь представляет собой неупорядоченный набор произвольных объектов выражения с доступом по ключу.

  • ключом может быть любой базовый тип выражения;
  • значением может быть как любой тип выражения, так и какая-либо операция.
Пример
{
    'f': 0, 
    'b': 'a' + 'r'
}

Динамическое создание словаря

{ 
    <ВыражениеКлюч> : <ВыражениеЗначение> [ for | для ] <Переменная> [ in | в ] <Данные> (Не обязательно [ if | если ] <Условие>) 
}
  • ВыражениеКлюч и ВыражениеЗначение и Условие могут содержать в себе Переменную.
  • Данные могут быть любым итерируемым типом данных.
  • В Условие используются базовые операции, возвращающий Логический тип данных.
Пример
{ i: 0 for i in ['a', 'b', 'c'] } → {'a': 0, 'b': 0, 'c': 0 }

Операции над словарями

Для словарей доступны базовые операции блока, за исключением присваивания. При условии, что вторым операндом является базовый объект. В таком случае, для каждого значения словаря будет проведена своя операция.

  • Если при выполнении операции, какой-либо элемент выдаст ошибку, то вся операция будет завершена с ошибкой.
  • Операции над двумя словарями приведут к ошибке.

Пример операции

{'a': 1, 'b': 2, 'c': 3} * 100 → {'a': 100, 'b': 200, 'c': 300}

Получение элемента словаря

<Словарь>[<ключ>]
Получение элемента словаря происходит по его ключу:
{'a': 100, 'b': 200, 'c': 300}['b'] → 200
В качестве ключа может использоваться выражение:
{'aa': 100, 'bb': 200, 'cc': 300}['c' + 'c'] → 300

Объект

Объектом является структура данных формата

{
    "pkey": {<key>: <value>},
    "attrs": {<key>: <value>}
}

Представлена краткая форма объекта, указаны только поля, важные для выражения.

где:

  • pkey - словарь первичных ключей, определяющих объект;
  • attrs - словарь атрибутов, не обязательных параметрах объекта.

Объекты нельзя создать внутри выражения. Их можно получить только через вход.

Получение значения объекта

См. Вход -> Получение значений входа

Значение объекта хранится в атрибуте vl. Если такого атрибута нет, то в качестве значения будет получен пустой элемент.

Получение значений атрибутов объекта

<Объект>[<ключАтрибута>]
Получение значения атрибута объекта происходит по его ключу.
{"pkey": {"id": 1}, "attrs": {"ord": 10, "name": "OBJ"}}['name'] → 'OBJ'

Получение ключей объекта невозможно.

Изменение значений объекта

Изменение значений объекта производится с помощью операции присваивания (см. ниже).

Операции над объектами

Для объектов доступны все базовые операции блока, причем они могут выполниться как и между объектом и базовым объектом (в таком случае логика работы аналогична операциям над словарем), так и между двумя объектами.

Если результатом операции между двумя объектами является новый объект, то первичные ключи для получившегося объекта берется от первого операнда.

Операция Операнды Описание
Сложение, Вычитание, Умножение, Деление Объект + Объект = Объект Происходит объединение объектов в один, после чего выполняется операция для каждых двух элементов с одинаковыми ключами. Если у одного из объектов нет атрибута, который присутствует в другом ряду, то в качестве значения используется Пустой элемент.
Сравнение Объект + Объект = Объект (все значения имеют Логический тип) Логика аналогична представленному выше, но все получившиеся значения будут иметь Логический тип.
Инверсия, Конъюнкция, Дизъюнкция Объект + Объект = Логический тип Результатом всегда будет логический тип.

Присваивание значения объекта

'ВходОбъекты'{<ключ> = <значениеКлюча>} = <значение>
Значение объекта сохраняется в атрибут vl. Если в исходном объекте этого атрибута не было, то он будет добавлен в момент операции присваивания.

Присваивание атрибутов объекта

<Объект>[<ключАтрибута>] = <значение>
В отличие от присваивания значения, присваивание атрибута можно сделать только при наличии самого атрибута в объекте.

Присваивание ключей объекта

Изменять значения ключей объекта нельзя.

Ряд данных

Рядом является структура данных формата

{
    "pkey": {<key>: <value>},
    "keys": [<key1>, <key2>,... <keyN>],
    "vl": [<value1>, <value2>,... <valueN>],
    "attrs": {<key>: <value>},
    "_params": {"fkey": [<labelKey>]}
}

Представлена краткая форма ряда, указаны только поля, важные для выражения.

где:

  • pkey - словарь первичных ключей, определяющих ряд;
  • keys - массив ключей ряда (совпадающий по размерности с массивом значений);
  • vl - массив значений ряда (совпадающий по размерности с массивом ключей);
  • attrs - словарь атрибутов, не обязательных параметрах ряда;
  • _params.fkey - список ключей, формирующий ряд (ключи ряда).

Ряды нельзя создать внутри выражения. Их можно получить только через вход.

Получение значения ряда

См. Вход -> Получение значений входа

Получение значений атрибутов ряда

<Ряд>[<ключАтрибута>]
Получение значения атрибута ряда происходит по его ключу.
{"pkey": {"id": 1}, "keys": [1, 2, 3], "vl": [0.1, 0.2, 0.3], "attrs": {"ord": 25, "name": "ROW"}, "_params": {"fkey": ["num"]}}['name'] → 'ROW'

Получение ключей ряда невозможно.

Изменение значений ряда

Изменение значений ряда производится с помощью операции присваивания (см. ниже).

Операции над рядами

Для рядов доступны все базовые операции блока, причем они могут выполниться как и между рядом и базовым объектом (в таком случае логика работы аналогична операциям над массивом), так и между двумя рядами.

Если результатом операции между двумя рядами является новый ряд, то первичные ключи для получившегося ряда берется от первого операнда.

Операция Операнды Описание
Сложение, Вычитание, Умножение, Деление Ряд + Ряд = Ряд Происходит объединение рядов в один ряд (при этом так же происходит и сортировка получившегося ряда по ключам), после чего выполняется операция для каждых двух элементов ряда с одинаковыми ключами. Если у одного из рядов нет значения для конкретного ключа, то в качестве значения используется Пустой элемент.
Сравнение Ряд + Ряд = Ряд (все значения имеют Логический тип) Логика аналогична представленному выше, но все получившиеся значения будут иметь Логический тип.
Инверсия, Конъюнкция, Дизъюнкция Ряд + Ряд = Логический тип Результатом всегда будет логический тип.

Присваивание одного значения в ряде

'ВходРяды'{<ключ> = <значениеКлюча>, <ключРяда> = <значениеКлючаРяда>} = <значение>
Происходит присваивание значения одному элементу из массива значений ряда.

Присваивание ряда цкликом

'ВходРяды'{<ключ> = <значениеКлюча>} = {<ключ>: <значение>}
Происходит изменение всех значений и ключей ряда.

В качестве значения должен выступать массив. Тогда ключи массива станут новыми ключами ряда, а значения - значениями ряда соответственно.

Присваивание атрибутов ряда

<Ряд>[<ключАтрибута>] = <значение>

Присваивание ключей ряда

Изменять значения ключей ряда нельзя.