# Справочник функций

{% hint style="info" %}
Символом **\[]** в заголовках подразделов отмечены опциональные аргументы. Их можно не указывать, если вам подходит значение по умолчанию.

Символом **>>>** в примерах ниже отмечен ввод пользователя, а на строку ниже указан результат вычисления этого выражения.

Символом **#** отмечены комментарии (пояснения) к коду.
{% endhint %}

## Общее

### len(seq)

Возвращает длину массива, количество ключей словаря или длину строки.

```python
>>> len([1, 2, 3])
3

>>> len('привет')
6
```

### int(v)

Преобразует аргумент в целое число.

```python
>>> int(10.2)
10

>>> int('10')
10

>>> '10' + 2
102

>>> int('10') + 2
12
```

### float(v)

Преобразует аргумент в дробное число.

```python
>>> float('10.2')
10.2
```

### str(v)

Преобразует аргумент в строку.

```python
>>> str(10.2)
10.2
```

### pretty(container, \[delimiter])

Форматирует число, массив или словарь, используя в качестве разделителя элементов **delimiter**.

```python
>>> 12345678 | pretty
12 345 678

>>> 12345678 | pretty('\'')
12'345'678

>>> ['один', 'два', 'три'] | pretty
один, два, три

>>> d = dict()
>>> d['x'] = 10
>>> d['y'] = 20

>>> d | pretty
x: 10
y: 20
```

## Арифметика

### round(v, \[nd])

Округляет значение **v** до **nd** знаков после запятой. Если второй аргумент не указан — округляет до целого.

```python
>>> round(10.2)
10

>>> round(10.992)
11

>>> round(10.992, 2)
10.99
```

### floor(v)

Округляет аргумент вниз до целого.

```python
>>> floor(10.9)
10
```

### ceil(v)

Округляет аргумент вверх до целого.

```python
>>> ceil(10.2)
11
```

### abs(v)

Возвращает абсолютное значение

```python
>>> abs(-5)
5
```

### min(a, b, ...)

Возвращает минимальный аргумент.

```python
>>> min(1, 2, 3)
1
```

### min(arr)

Возвращает минимальный элемент массива.

```python
>>> min([1, 2, 3])
1
```

### max(a, b, ...)

Возвращает максимальный аргумент.

```python
>>> max(1, 2, 3)
3
```

### max(arr)

Возвращает максимальный элемент массива.

```python
>>> max([1, 2, 3])
3
```

### rand()

Возвращает дробное число в полуинтервале \[0, 1).

```python
>>> rand()
0.43463103446060180612420253964955918490886688232421875
```

### rand(a, b)

Возвращает целое число в интервале \[a, b].

```python
>>> rand(1, 10)
10
```

### rand(arr)

Возвращает случайный элемент массива.

```python
>>> rand([1, 2, 3])
3
```

## Работа со строками

### startswith(container, s)

Проверяет, что строка **container** начинается с подстроки **s**.

```python
>>> 'привет мир'.startswith('прив')
True
```

### endswith(container, s)

Проверяет, что строка **container** заканчивается подстрокой **s**.

```python
>>> 'привет мир'.endswith('мир')
True
```

### **lower(s)**

Преобразует строку в нижний регистр. Удобно для последующего сравнения с другой строкой без учёта регистра.

```python
>>> 'ПрИвЕт' | lower
привет

>>> 'ПрИвЕт' == 'привет'
False

>>> 'ПрИвЕт' | lower == 'привет'
True
```

### **upper(s)**

Преобразует строку в верхний регистр.

```python
>>> 'ПрИвЕт' | upper
ПРИВЕТ
```

### strip(s)

Удаляет лишние пробелы в начале и в конце строки.

```python
>>> '  привет     ' | strip
привет
```

### split(s, \[\[sep=' ', \[max\_split=-1]])

Преобразует строку в массив, разделяя её по указанному символу **sep** (по умолчанию — пробел), так же можно указать **max\_split** — максимальное число делений.

```python
>>> 'раз два три' | split
['раз', 'два', 'три']

>>> 'раз два три' | split(' ', 1)
['раз', 'два три']
```

### replace(s, old, new, \[count=-1])

Заменяет подстроку **old** в строке **s** на строку **new**. По умолчанию (если не указан **count**) заменяются все вхождения подстроки.

```python
>>> 'Привет, Вася'.replace('Вася', 'Петя')
Привет, Петя

>>> 'тест, тест, тест'.replace('тест', 'test')
'test, test, test'

>>> 'тест, тест, тест'.replace('тест', 'test', 1)
'test, тест, тест'
```

## Регулярные выражения

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

Подробнее можно почитать тут: <https://ru.wikipedia.org/wiki/Регулярные_выражения>

Проверить работу своих регулярных выражений можно тут: <https://regex101.com>

Примеры использования: [Работа с регулярными выражениями](/smartquery/recipes/rabota-s-regulyarnymi-vyrazheniyami.md)

### match(s, pattern, \[flags])

Находит в строке **s** подстроку соответствующую регулярному выражению **pattern**. Если такой подстроки нет, возвращается **None**.

Поддерживаемые флаги:

* i — не учитывать регистр
* m — многострочный матчинг
* s — . (точка) матчит переносы строк

```python
>>> 'привет, мир' | match(r'мир')
мир

>>> 'привет, мир' | match(r'тест')
None

# поиск числа в строке
>>> 'пополнить, 500' | match(r'\d+')
500

# выделяем email из строки
>>> 'Моя почта: name@test.com' | match(r'\S+@\S+')
name@test.com

# поиск с учётом регистра (по-умолчанию)
>>> 'ТЕСТ' | match(r'тест')
None

# без учёта регистра
>>> 'ТЕСТ' | match(r'тест', 'i')
ТЕСТ

# ^$ означают, что вся строка должна удовлетворять фильтру
>>> 'пополнить, 500' | match(r'^пополнить, \d+$')
пополнить, 500

# лишний текст не удовлетворяет фильтру
>>> 'пополнить, 500 какой-то лишний текст' | match(r'^пополнить, \d+$')
None
```

### match\_groups(s, pattern, \[flags])

Находит в строке **s** подстроку соответствующую регулярному выражению **pattern**. Если такой подстроки нет, возвращается **None**.

В отличие от **match()** возвращает не подстроку, а массив групп. Причём первым элементом массива является вся найденная подстрока.

Поддерживаемые флаги:

* i — не учитывать регистр
* m — многострочный матчинг
* s — . (точка) матчит переносы строк

```python
# выделяем 2 группы: число и валюту
>>> 'пополнить на 100 рублей' | match_groups(r'(\d+) (\w+)')
['100 рублей', '100', 'рублей']
```

### match\_all(s, pattern, \[flags])

Находит в строке **s** все подстроки соответствующие регулярному выражению **pattern**.

Поддерживаемые флаги:

* i — не учитывать регистр
* m — многострочный матчинг
* s — . (точка) матчит переносы строк

```python
# находим все числа в строке
>>> '1, 2, 3, 4, 5' | match_all(r'\d+')
['1', '2', '3', '4', '5']
```

## Работа с массивами

### Операторы

```python
>>> arr = [1, 2, 3]

# получение значения по индексу
>>> arr[0]
1

# последний элемент массива можно получить так:
>>> arr[-1]
3

# проверка наличия значения в массиве
>>> 3 in arr
True

# проверка отсутствия значения в массиве
>>> 4 not in arr
True

# изменение значения по индексу
>>> arr[0] = 100
>>> arr
[100, 2, 3]

# удаление значения по индексу
>>> del arr[0]
>>> arr
[2, 3]
```

### Слайсы

```python
>>> arr = [1, 2, 3, 4, 5]

# элементы массива, начиная с указанного индекса
>>> arr[2:]
[3, 4, 5]

# элементы массива до указанного индекса
>>> arr[:2]
[1, 2]

# каждый второй элемент массива
>>> arr[::2]
[1, 3, 5]

# переворот массива
>>> arr[::-1]
[5, 4, 3, 2, 1]
```

### push(arr, v)

Добавляет элемент **v** в конец массива **arr**.

```python
>>> arr = [1, 2]
>>> arr.push(3)
>>> arr
[1, 2, 3]
```

### pop(arr, \[i])

Удаляет элемент с индексом **i**. Если **i** не указан, то удаляется последний элемент массива.

```python
>>> arr = [1, 2, 3]
>>> arr.pop()
>>> arr
[1, 2]

>>> arr = [1, 2, 3]
>>> arr.pop(0)
>>> arr
[2, 3]
```

### insert(arr, i, v)

Вставляет значение **v** на место **i**.

```python
>>> arr = [1, 2, 3]
>>> arr.insert(0, 100)
>>> arr
[100, 1, 2, 3]
```

### remove(arr, v)

Удаляет первое вхождение элемента со значением **v**.

```python
>>> arr = [1, 2, 100, 3]
>>> arr.remove(100)
>>> arr
[1, 2, 3]
```

### sorted(arr)

Возвращает копию массива, значения в котором упорядочены по возрастанию.

```python
>>> arr = [2, 10, 1]
>>> arr | sorted
[1, 2, 10]
```

### sorted(arr, key, reversed=False)

Возвращает копию массива, значения в котором упорядочены по возрастанию (или убыванию, если **reversed** равно **True**). **key** — функция, которая возвращает значение по котором нужно выполнять сортировку.

```python
# сортируем по полю 'x'
>>> [{'x': 30}, {'x': 10}, {'x': 20}] | sorted(el => el['x'])
[{'x': 10}, {'x': 20}, {'x': 30}]

# сортируем по полю 'x' в обратном направлении
>>> [{'x': 30}, {'x': 10}, {'x': 20}] | sorted(el => el['x'], True)
[{'x': 30}, {'x': 20}, {'x': 10}]

# просто сортируем по убыванию
[30, 10, 20] | sorted(None, False)
[30, 20, 10]
```

### reversed(arr)

Возвращает копию массива, значения в котором находятся в обратном порядке.

```python
>>> arr = [2, 10, 1]
>>> arr | reversed
[1, 10, 2]
```

### enumerate(arr)

Возвращает массив пар (индекс, значение).

```python
>>> arr = [2, 10, 1]
>>> arr | enumerate
[(0, 2), (1, 10), (2, 1)]
```

### shuffle(arr)

Возвращает копию массива, отсортированную в случайном порядке.

```python
>>> arr = [2, 10, 1]
>>> arr | shuffle
[10, 1, 2]
```

### index\_of(arr, value)

Возвращает индекс первого элемента массива, равного указанному значению **value**. Если элемента с указанным значением в массиве нет, возвращается **None**.

```python
>>> arr = [2, 10, 1]
>>> arr | index_of('10')
1
```

### join(arr, \[sep])

Объединяет элементы массива в одну строку, используя сепаратор **sep**.

```python
>>> arr = [1, 2, 3]
>>> arr | join
1
2
3

>>> arr | join(':')
1:2:3
```

### sum(arr)

Возвращает сумму элементов массива.

```python
>>> [1, 2, 3] | sum
6
```

### map(arr, l)

Возвращает копию массива, полученную в результате применения лямбда-функции **l** к каждому его элементу.

```python
# умножим каждый элемент на 2
>>> [1, 2, 3] | map(v => v * 2)
[2, 4, 6]
```

### filter(arr, l)

Возвращает копию массива, элементы которого подходят под фильтр, заданный лямбда-функцией **l**.

```python
# отфильтруем значения, большие, чем 5
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | filter(v => v > 5)
[6, 7, 8, 9, 10]
```

### reduce(arr, l)

Объединяет элементы массива в единое целое, вызывая переданную лямбда-функцию **l** для каждого элемента. Первым аргументов лямбда-функции является накопленный на данный момент результат, вторым — очередной элемент массива.

```python
# сумма значение
>>> [1, 2, 3] | reduce((acc, v) => acc + v)
6

# произведение значение
>>> [1, 2, 3] | reduce((acc, v) => acc * v)
6

# сумма строк
>>> [1, 2, 3] | reduce((acc, v) => str(acc) + v)
123
```

## Работа со словарями

### Операторы

```python
# объявление словаря
>>> корзина = {'хлеб': 3, 'греча': 10}

# получение значения по ключу
>>> корзина['хлеб']
3

# проверка наличия ключа в словаре
>>> 'хлеб' in корзина
True

# изменение значения по ключу
>>> корзина['хлеб'] = 2
>>> корзина
{'хлеб': 2, 'греча': 10}

# удаление значения по индексу
>>> del корзина['греча']
>>> корзина
{'хлеб': 2}
```

### get(k, \[default])

Возвращает значение по ключу **k**. Если такого ключа в словаре нет, возвращается значение **default**.

```python
>>> корзина = {'хлеб': 3, 'греча': 10}
>>> корзина.get('хлеб')
3
>>> корзина.get('сосиски', 100)
100
```

### keys(d)

Возвращает массив ключей словаря.

```python
>>> корзина = {'хлеб': 3, 'греча': 10}
>>> корзина | keys
['хлеб', 'греча']
```

### values(d)

Возвращает массив значений словаря.

```python
>>> корзина = {'хлеб': 3, 'греча': 10}
>>> корзина | values
[3, 10]
```

### map(d, l)

Возвращает массив, полученный в результате применения лямбда-функции **l** к каждой паре ключ-значение (**k, v**).

```python
>>> корзина | map((k, v) => k + ': ' + v + ' шт') | join
хлеб: 3 шт
греча: 10 шт
```

### sorted(d, key, reversed=False)

Возвращает копию словаря, значения в котором упорядочены по возрастанию (или убыванию, если **reversed** равно **True**). **key** — функция, которая возвращает значение по которому нужно выполнять сортировку.

```python
# сортируем по значению
>>> {'Vasja': 10, 'Tom': 5} | sorted((k, v) => v)
{'Tom': 5, 'Vasja': 10}

# сортируем по значению (по убыванию)
>>> {'Vasja': 10, 'Tom': 5} | sorted((k, v) => v, True)
{'Vasja': 10, 'Tom': 5}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.smartbot-vk.ru/smartquery/spravochnik-funkcii.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
