rupython 1.2.11__py3-none-any.whl → 1.2.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rupython/__/342/225/250/320/247/342/225/250/342/226/221/342/225/250/342/224/202/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/233/342/225/250/342/226/223/342/225/250/342/225/233/342/225/244/320/227/342/225/250/342/225/234/342/225/244/320/233/342/225/250/342/225/243_/342/225/250/342/225/221/342/225/250/342/225/233/342/225/250/342/224/244__.py +49 -4
- rupython/__/342/225/250/320/256/342/225/250/342/226/222/342/225/244/320/231/342/225/250/342/225/225/342/225/250/342/225/241_/342/225/244/320/224/342/225/244/320/223/342/225/250/342/225/234/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225__.py +9 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/240/342/225/244/320/221/342/225/250/342/225/225/342/225/250/342/225/234/342/225/244/320/225/342/225/244/320/220.py +206 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/241/342/225/250/320/244.py +61 -76
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/244/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/226/221/342/225/250/320/242/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/235/342/225/244/320/237.py +222 -209
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/244/320/223/342/225/244/320/227/342/225/250/342/226/221.py +87 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/227/342/225/250/342/225/241/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225.py +529 -396
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/256/342/225/244/320/227/342/225/250/342/225/241/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/224/244/342/225/244/320/234.py +177 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/257/342/225/250/342/225/233/342/225/244/320/222/342/225/250/342/225/233/342/225/250/342/225/221/342/225/250/342/225/225.py +273 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/260/342/225/250/342/225/241/342/225/250/342/224/202/342/225/250/320/242/342/225/244/320/233/342/225/244/320/220.py +51 -51
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/METADATA +4 -4
- rupython-1.2.13.dist-info/RECORD +19 -0
- rupython-1.2.11.dist-info/RECORD +0 -15
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/LICENSE +0 -0
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/WHEEL +0 -0
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/top_level.txt +0 -0
@@ -1,426 +1,559 @@
|
|
1
|
-
|
1
|
+
import collections
|
2
2
|
import collections.abc
|
3
|
+
from rupython import __Общие_функции__
|
3
4
|
|
4
5
|
_Последовательность = collections.abc.Sequence
|
5
6
|
_Изменяемая_последовательность = collections.abc.MutableSequence
|
6
7
|
_Отображение = collections.abc.Mapping
|
7
8
|
_Изменяемое_отображение = collections.abc.MutableMapping
|
9
|
+
_Множество = collections.abc.Set
|
10
|
+
_Изменяемое_множество = collections.abc.MutableSet
|
11
|
+
|
12
|
+
Словарь_параметров = {
|
13
|
+
'имя': 'name',
|
14
|
+
'поля': 'fields',
|
15
|
+
'перебираемый': 'iterable',
|
16
|
+
'максимальная_длина': 'maxlen',
|
17
|
+
'функция_по_умолчанию': 'default_factory',
|
18
|
+
'словари': 'maps',
|
19
|
+
'ключ': 'key',
|
20
|
+
'значение': 'value',
|
21
|
+
'по_умолчанию': 'default',
|
22
|
+
'количество': 'n'
|
23
|
+
}
|
8
24
|
|
9
25
|
class Именованный_кортеж(_Последовательность):
|
10
|
-
def __init__(
|
11
|
-
|
12
|
-
|
13
|
-
def __call__(
|
14
|
-
return
|
15
|
-
|
16
|
-
def __getattr__(
|
17
|
-
return getattr(
|
18
|
-
|
19
|
-
def __getitem__(
|
20
|
-
return
|
21
|
-
|
22
|
-
def __len__(
|
23
|
-
return len(
|
24
|
-
|
25
|
-
def __iter__(
|
26
|
-
return iter(
|
27
|
-
|
28
|
-
def __contains__(
|
29
|
-
return элемент in
|
30
|
-
|
31
|
-
def __reversed__(
|
32
|
-
return reversed(
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
26
|
+
def __init__(экземпляр, имя, поля):
|
27
|
+
экземпляр._namedtuple = collections.namedtuple(имя, поля)
|
28
|
+
|
29
|
+
def __call__(экземпляр, *ПА, **ИА):
|
30
|
+
return экземпляр._namedtuple(*ПА, **ИА)
|
31
|
+
|
32
|
+
def __getattr__(экземпляр, имя):
|
33
|
+
return getattr(экземпляр._namedtuple, имя)
|
34
|
+
|
35
|
+
def __getitem__(экземпляр, индекс):
|
36
|
+
return экземпляр._namedtuple.__getitem__(индекс)
|
37
|
+
|
38
|
+
def __len__(экземпляр):
|
39
|
+
return len(экземпляр._namedtuple)
|
40
|
+
|
41
|
+
def __iter__(экземпляр):
|
42
|
+
return iter(экземпляр._namedtuple)
|
43
|
+
|
44
|
+
def __contains__(экземпляр, элемент):
|
45
|
+
return элемент in экземпляр._namedtuple
|
46
|
+
|
47
|
+
def __reversed__(экземпляр):
|
48
|
+
return reversed(экземпляр._namedtuple)
|
49
|
+
|
50
|
+
def __str__(экземпляр):
|
51
|
+
return str(экземпляр._namedtuple)
|
52
|
+
|
53
|
+
class Двусторонняя_очередь(_Изменяемая_последовательность):
|
54
|
+
def __init__(экземпляр, перебираемый = None, максимальная_длина = None):
|
55
|
+
ИА = {}
|
56
|
+
if перебираемый is not None:
|
57
|
+
ИА['iterable'] = перебираемый
|
58
|
+
if максимальная_длина is not None:
|
59
|
+
ИА['maxlen'] = максимальная_длина
|
60
|
+
экземпляр._deque = collections.deque(**ИА)
|
61
|
+
|
62
|
+
def Добавить_в_начало(экземпляр, элемент):
|
63
|
+
экземпляр._deque.appendleft(элемент)
|
64
|
+
|
65
|
+
def Добавить_в_конец(экземпляр, элемент):
|
66
|
+
экземпляр._deque.append(элемент)
|
67
|
+
|
68
|
+
def Удалить_с_начала(экземпляр):
|
69
|
+
if not экземпляр._deque:
|
46
70
|
raise IndexError("Очередь пуста")
|
47
|
-
return
|
48
|
-
|
49
|
-
def Удалить_с_конца(
|
50
|
-
if not
|
71
|
+
return экземпляр._deque.popleft()
|
72
|
+
|
73
|
+
def Удалить_с_конца(экземпляр):
|
74
|
+
if not экземпляр._deque:
|
51
75
|
raise IndexError("Очередь пуста")
|
52
|
-
return
|
53
|
-
|
54
|
-
def Очистить(
|
55
|
-
|
56
|
-
|
57
|
-
def Длина(
|
58
|
-
return len(
|
59
|
-
|
60
|
-
def Расширить_в_начало(
|
61
|
-
|
62
|
-
|
63
|
-
def Расширить_в_конец(
|
64
|
-
|
65
|
-
|
66
|
-
def Повернуть(
|
67
|
-
|
68
|
-
|
69
|
-
def Перевернуть(
|
70
|
-
|
71
|
-
|
72
|
-
def Количество(
|
73
|
-
return sum(1 for x in
|
74
|
-
|
75
|
-
def Индекс(
|
76
|
+
return экземпляр._deque.pop()
|
77
|
+
|
78
|
+
def Очистить(экземпляр):
|
79
|
+
экземпляр._deque.clear()
|
80
|
+
|
81
|
+
def Длина(экземпляр):
|
82
|
+
return len(экземпляр._deque)
|
83
|
+
|
84
|
+
def Расширить_в_начало(экземпляр, перебираемый):
|
85
|
+
экземпляр._deque.extendleft(перебираемый)
|
86
|
+
|
87
|
+
def Расширить_в_конец(экземпляр, перебираемый):
|
88
|
+
экземпляр._deque.extend(перебираемый)
|
89
|
+
|
90
|
+
def Повернуть(экземпляр, количество):
|
91
|
+
экземпляр._deque.rotate(количество)
|
92
|
+
|
93
|
+
def Перевернуть(экземпляр):
|
94
|
+
экземпляр._deque.reverse()
|
95
|
+
|
96
|
+
def Количество(экземпляр, элемент):
|
97
|
+
return sum(1 for x in экземпляр._deque if x == элемент)
|
98
|
+
|
99
|
+
def Индекс(экземпляр, элемент, начало = 0, конец = None):
|
76
100
|
if конец is None:
|
77
|
-
конец = len(
|
78
|
-
for i, x in enumerate(
|
101
|
+
конец = len(экземпляр._deque)
|
102
|
+
for i, x in enumerate(экземпляр._deque):
|
79
103
|
if начало <= i < конец and x == элемент:
|
80
104
|
return i
|
81
105
|
raise ValueError(f"{элемент} не найден в диапазоне")
|
82
|
-
|
83
|
-
def
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
def __str__(
|
110
|
-
|
106
|
+
|
107
|
+
def Вставить(экземпляр, индекс, значение):
|
108
|
+
экземпляр._deque.rotate(-индекс)
|
109
|
+
экземпляр._deque.appendleft(значение)
|
110
|
+
экземпляр._deque.rotate(индекс)
|
111
|
+
|
112
|
+
def __getitem__(экземпляр, индекс):
|
113
|
+
return экземпляр._deque[индекс]
|
114
|
+
|
115
|
+
def __setitem__(экземпляр, индекс, значение):
|
116
|
+
экземпляр._deque[индекс] = значение
|
117
|
+
|
118
|
+
def __delitem__(экземпляр, индекс):
|
119
|
+
del экземпляр._deque[индекс]
|
120
|
+
|
121
|
+
def __len__(экземпляр):
|
122
|
+
return len(экземпляр._deque)
|
123
|
+
|
124
|
+
def __iter__(экземпляр):
|
125
|
+
return iter(экземпляр._deque)
|
126
|
+
|
127
|
+
def __contains__(экземпляр, элемент):
|
128
|
+
return элемент in экземпляр._deque
|
129
|
+
|
130
|
+
def __reversed__(экземпляр):
|
131
|
+
return iter(reversed(экземпляр._deque))
|
132
|
+
|
133
|
+
def __str__(экземпляр):
|
134
|
+
элементы = ', '.join(str(x) for x in экземпляр._deque)
|
135
|
+
return f"Двусторонняя_очередь([{элементы}])"
|
111
136
|
|
112
137
|
class Счётчик(_Отображение):
|
113
|
-
def __init__(
|
114
|
-
|
115
|
-
|
116
|
-
def Обновить(
|
117
|
-
|
118
|
-
|
119
|
-
def
|
120
|
-
|
121
|
-
|
122
|
-
def
|
123
|
-
return
|
124
|
-
|
125
|
-
def
|
126
|
-
return
|
127
|
-
|
128
|
-
def
|
129
|
-
return
|
130
|
-
|
131
|
-
def
|
132
|
-
return
|
133
|
-
|
134
|
-
def
|
135
|
-
|
136
|
-
|
137
|
-
def
|
138
|
-
|
139
|
-
|
140
|
-
def
|
141
|
-
return
|
138
|
+
def __init__(экземпляр, перебираемый = None):
|
139
|
+
экземпляр._counter = collections.Counter(перебираемый or [])
|
140
|
+
|
141
|
+
def Обновить(экземпляр, перебираемый):
|
142
|
+
экземпляр._counter.update(перебираемый)
|
143
|
+
|
144
|
+
def Вычесть(экземпляр, перебираемый):
|
145
|
+
экземпляр._counter.subtract(перебираемый)
|
146
|
+
|
147
|
+
def Наиболее_частые(экземпляр, количество = None):
|
148
|
+
return экземпляр._counter.most_common(количество)
|
149
|
+
|
150
|
+
def Элементы(экземпляр):
|
151
|
+
return list(экземпляр._counter.elements())
|
152
|
+
|
153
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
154
|
+
return экземпляр._counter.get(ключ, по_умолчанию)
|
155
|
+
|
156
|
+
def __getitem__(экземпляр, ключ):
|
157
|
+
return экземпляр._counter[ключ]
|
158
|
+
|
159
|
+
def __setitem__(экземпляр, ключ, значение):
|
160
|
+
экземпляр._counter[ключ] = значение
|
161
|
+
|
162
|
+
def __delitem__(экземпляр, ключ):
|
163
|
+
del экземпляр._counter[ключ]
|
164
|
+
|
165
|
+
def __iter__(экземпляр):
|
166
|
+
return iter(экземпляр._counter)
|
167
|
+
|
168
|
+
def __len__(экземпляр):
|
169
|
+
return len(экземпляр._counter)
|
170
|
+
|
171
|
+
def __contains__(экземпляр, ключ):
|
172
|
+
return ключ in экземпляр._counter
|
173
|
+
|
174
|
+
def __add__(экземпляр, другой):
|
175
|
+
if isinstance(другой, Счётчик):
|
176
|
+
return Счётчик(экземпляр._counter + другой._counter)
|
177
|
+
return NotImplemented
|
178
|
+
|
179
|
+
def __sub__(экземпляр, другой):
|
180
|
+
if isinstance(другой, Счётчик):
|
181
|
+
return Счётчик(экземпляр._counter - другой._counter)
|
182
|
+
return NotImplemented
|
183
|
+
|
184
|
+
def __str__(экземпляр):
|
185
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._counter.items())
|
186
|
+
return f"Счётчик({{{элементы}}})"
|
187
|
+
|
188
|
+
def В_строку(экземпляр):
|
189
|
+
if not экземпляр._counter:
|
190
|
+
return "Пустой счётчик"
|
191
|
+
элементы = []
|
192
|
+
for ключ, количество in экземпляр._counter.items():
|
193
|
+
слово = __Общие_функции__.Склонение_после_числительного(количество, ['элемент', 'элемента', 'элементов'])
|
194
|
+
элементы.append(f"{ключ}: {слово}")
|
195
|
+
return ', '.join(элементы)
|
142
196
|
|
143
197
|
class Упорядоченный_словарь(_Изменяемое_отображение):
|
144
|
-
def __init__(
|
145
|
-
|
146
|
-
|
147
|
-
def Вставить(
|
148
|
-
|
149
|
-
|
150
|
-
def Удалить(
|
151
|
-
return
|
152
|
-
|
153
|
-
def Удалить_последний(
|
154
|
-
return
|
155
|
-
|
156
|
-
def Получить(
|
157
|
-
return
|
158
|
-
|
159
|
-
def Установить_по_умолчанию(
|
160
|
-
return
|
161
|
-
|
162
|
-
def Ключи(
|
163
|
-
return list(
|
164
|
-
|
165
|
-
def Значения(
|
166
|
-
return list(
|
167
|
-
|
168
|
-
def Элементы(
|
169
|
-
return list(
|
170
|
-
|
171
|
-
def
|
172
|
-
|
173
|
-
|
174
|
-
def
|
175
|
-
|
176
|
-
|
177
|
-
def
|
178
|
-
|
179
|
-
|
180
|
-
def
|
181
|
-
|
182
|
-
|
183
|
-
def
|
184
|
-
return
|
185
|
-
|
186
|
-
def
|
187
|
-
return
|
188
|
-
|
189
|
-
def
|
190
|
-
return
|
198
|
+
def __init__(экземпляр, *ПА, **ИА):
|
199
|
+
экземпляр._ordered_dict = collections.OrderedDict(*ПА, **ИА)
|
200
|
+
|
201
|
+
def Вставить(экземпляр, ключ, значение):
|
202
|
+
экземпляр._ordered_dict[ключ] = значение
|
203
|
+
|
204
|
+
def Удалить(экземпляр, ключ, по_умолчанию = None):
|
205
|
+
return экземпляр._ordered_dict.pop(ключ, по_умолчанию)
|
206
|
+
|
207
|
+
def Удалить_последний(экземпляр, последний = True):
|
208
|
+
return экземпляр._ordered_dict.popitem(last = последний)
|
209
|
+
|
210
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
211
|
+
return экземпляр._ordered_dict.get(ключ, по_умолчанию)
|
212
|
+
|
213
|
+
def Установить_по_умолчанию(экземпляр, ключ, по_умолчанию = None):
|
214
|
+
return экземпляр._ordered_dict.setdefault(ключ, по_умолчанию)
|
215
|
+
|
216
|
+
def Ключи(экземпляр):
|
217
|
+
return list(экземпляр._ordered_dict.keys())
|
218
|
+
|
219
|
+
def Значения(экземпляр):
|
220
|
+
return list(экземпляр._ordered_dict.values())
|
221
|
+
|
222
|
+
def Элементы(экземпляр):
|
223
|
+
return list(экземпляр._ordered_dict.items())
|
224
|
+
|
225
|
+
def Переместить_в_конец(экземпляр, ключ, последний = True):
|
226
|
+
экземпляр._ordered_dict.move_to_end(ключ, last = последний)
|
227
|
+
|
228
|
+
def __getitem__(экземпляр, ключ):
|
229
|
+
return экземпляр._ordered_dict[ключ]
|
230
|
+
|
231
|
+
def __setitem__(экземпляр, ключ, значение):
|
232
|
+
экземпляр._ordered_dict[ключ] = значение
|
233
|
+
|
234
|
+
def __delitem__(экземпляр, ключ):
|
235
|
+
del экземпляр._ordered_dict[ключ]
|
236
|
+
|
237
|
+
def __iter__(экземпляр):
|
238
|
+
return iter(экземпляр._ordered_dict)
|
239
|
+
|
240
|
+
def __len__(экземпляр):
|
241
|
+
return len(экземпляр._ordered_dict)
|
242
|
+
|
243
|
+
def __contains__(экземпляр, ключ):
|
244
|
+
return ключ in экземпляр._ordered_dict
|
245
|
+
|
246
|
+
def __str__(экземпляр):
|
247
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._ordered_dict.items())
|
248
|
+
return f"Упорядоченный_словарь({{{элементы}}})"
|
191
249
|
|
192
250
|
class Словарь_по_умолчанию(_Изменяемое_отображение):
|
193
|
-
def __init__(
|
194
|
-
|
195
|
-
|
196
|
-
def Получить(
|
197
|
-
return
|
198
|
-
|
199
|
-
def Установить_по_умолчанию(
|
200
|
-
return
|
201
|
-
|
202
|
-
def Удалить(
|
203
|
-
return
|
204
|
-
|
205
|
-
def
|
206
|
-
return
|
207
|
-
|
208
|
-
def
|
209
|
-
|
210
|
-
|
211
|
-
def
|
212
|
-
|
213
|
-
|
214
|
-
def
|
215
|
-
|
216
|
-
|
217
|
-
def
|
218
|
-
return
|
219
|
-
|
220
|
-
def
|
221
|
-
return
|
222
|
-
|
223
|
-
def
|
224
|
-
return
|
225
|
-
|
226
|
-
def
|
227
|
-
return list(
|
228
|
-
|
229
|
-
def
|
230
|
-
return list(
|
231
|
-
|
232
|
-
def
|
233
|
-
return
|
251
|
+
def __init__(экземпляр, функция_по_умолчанию = None, *ПА, **ИА):
|
252
|
+
экземпляр._default_dict = collections.defaultdict(функция_по_умолчанию, *ПА, **ИА)
|
253
|
+
|
254
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
255
|
+
return экземпляр._default_dict.get(ключ, по_умолчанию)
|
256
|
+
|
257
|
+
def Установить_по_умолчанию(экземпляр, ключ, по_умолчанию = None):
|
258
|
+
return экземпляр._default_dict.setdefault(ключ, по_умолчанию)
|
259
|
+
|
260
|
+
def Удалить(экземпляр, ключ, по_умолчанию = None):
|
261
|
+
return экземпляр._default_dict.pop(ключ, по_умолчанию)
|
262
|
+
|
263
|
+
def Удалить_последний(экземпляр, последний = True):
|
264
|
+
return экземпляр._default_dict.popitem(last = последний)
|
265
|
+
|
266
|
+
def __getitem__(экземпляр, ключ):
|
267
|
+
return экземпляр._default_dict[ключ]
|
268
|
+
|
269
|
+
def __setitem__(экземпляр, ключ, значение):
|
270
|
+
экземпляр._default_dict[ключ] = значение
|
271
|
+
|
272
|
+
def __delitem__(экземпляр, ключ):
|
273
|
+
del экземпляр._default_dict[ключ]
|
274
|
+
|
275
|
+
def __iter__(экземпляр):
|
276
|
+
return iter(экземпляр._default_dict)
|
277
|
+
|
278
|
+
def __len__(экземпляр):
|
279
|
+
return len(экземпляр._default_dict)
|
280
|
+
|
281
|
+
def __contains__(экземпляр, ключ):
|
282
|
+
return ключ in экземпляр._default_dict
|
283
|
+
|
284
|
+
def Ключи(экземпляр):
|
285
|
+
return list(экземпляр._default_dict.keys())
|
286
|
+
|
287
|
+
def Значения(экземпляр):
|
288
|
+
return list(экземпляр._default_dict.values())
|
289
|
+
|
290
|
+
def Элементы(экземпляр):
|
291
|
+
return list(экземпляр._default_dict.items())
|
292
|
+
|
293
|
+
def __str__(экземпляр):
|
294
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._default_dict.items())
|
295
|
+
return f"Словарь_по_умолчанию({{{элементы}}})"
|
234
296
|
|
235
297
|
class Слоистый_словарь(_Изменяемое_отображение):
|
236
|
-
def __init__(
|
237
|
-
|
238
|
-
|
239
|
-
def Новый_дочерний(
|
240
|
-
return
|
241
|
-
|
242
|
-
def Родители(
|
243
|
-
return
|
244
|
-
|
245
|
-
def Получить(
|
246
|
-
return
|
247
|
-
|
248
|
-
def Установить_по_умолчанию(
|
249
|
-
return
|
250
|
-
|
251
|
-
def Удалить(
|
252
|
-
return
|
253
|
-
|
254
|
-
def __getitem__(
|
255
|
-
return
|
256
|
-
|
257
|
-
def __setitem__(
|
258
|
-
|
259
|
-
|
260
|
-
def __delitem__(
|
261
|
-
del
|
262
|
-
|
263
|
-
def __iter__(
|
264
|
-
return iter(
|
265
|
-
|
266
|
-
def __len__(
|
267
|
-
return len(
|
268
|
-
|
269
|
-
def __contains__(
|
270
|
-
return ключ in
|
271
|
-
|
272
|
-
def Ключи(
|
273
|
-
return list(
|
274
|
-
|
275
|
-
def Значения(
|
276
|
-
return list(
|
277
|
-
|
278
|
-
def Элементы(
|
279
|
-
return list(
|
280
|
-
|
281
|
-
def __str__(
|
282
|
-
|
298
|
+
def __init__(экземпляр, *словари):
|
299
|
+
экземпляр._chainmap = collections.ChainMap(*словари)
|
300
|
+
|
301
|
+
def Новый_дочерний(экземпляр, словарь = None):
|
302
|
+
return Слоистый_словарь(словарь or {}, *экземпляр._chainmap.maps)
|
303
|
+
|
304
|
+
def Родители(экземпляр):
|
305
|
+
return Слоистый_словарь(*экземпляр._chainmap.maps[1:])
|
306
|
+
|
307
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
308
|
+
return экземпляр._chainmap.get(ключ, по_умолчанию)
|
309
|
+
|
310
|
+
def Установить_по_умолчанию(экземпляр, ключ, по_умолчанию = None):
|
311
|
+
return экземпляр._chainmap.setdefault(ключ, по_умолчанию)
|
312
|
+
|
313
|
+
def Удалить(экземпляр, ключ, по_умолчанию = None):
|
314
|
+
return экземпляр._chainmap.pop(ключ, по_умолчанию)
|
315
|
+
|
316
|
+
def __getitem__(экземпляр, ключ):
|
317
|
+
return экземпляр._chainmap[ключ]
|
318
|
+
|
319
|
+
def __setitem__(экземпляр, ключ, значение):
|
320
|
+
экземпляр._chainmap[ключ] = значение
|
321
|
+
|
322
|
+
def __delitem__(экземпляр, ключ):
|
323
|
+
del экземпляр._chainmap[ключ]
|
324
|
+
|
325
|
+
def __iter__(экземпляр):
|
326
|
+
return iter(экземпляр._chainmap)
|
327
|
+
|
328
|
+
def __len__(экземпляр):
|
329
|
+
return len(экземпляр._chainmap)
|
330
|
+
|
331
|
+
def __contains__(экземпляр, ключ):
|
332
|
+
return ключ in экземпляр._chainmap
|
333
|
+
|
334
|
+
def Ключи(экземпляр):
|
335
|
+
return list(экземпляр._chainmap.keys())
|
336
|
+
|
337
|
+
def Значения(экземпляр):
|
338
|
+
return list(экземпляр._chainmap.values())
|
339
|
+
|
340
|
+
def Элементы(экземпляр):
|
341
|
+
return list(экземпляр._chainmap.items())
|
342
|
+
|
343
|
+
def __str__(экземпляр):
|
344
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._chainmap.items())
|
345
|
+
return f"Слоистый_словарь({{{элементы}}})"
|
283
346
|
|
284
347
|
class Собственный_словарь(_Изменяемое_отображение):
|
285
|
-
def __init__(
|
286
|
-
|
287
|
-
|
288
|
-
def Получить(
|
289
|
-
return
|
290
|
-
|
291
|
-
def Установить_по_умолчанию(
|
292
|
-
return
|
293
|
-
|
294
|
-
def Удалить(
|
295
|
-
return
|
296
|
-
|
297
|
-
def
|
298
|
-
return
|
299
|
-
|
300
|
-
def
|
301
|
-
|
302
|
-
|
303
|
-
def
|
304
|
-
|
305
|
-
|
306
|
-
def
|
307
|
-
|
308
|
-
|
309
|
-
def
|
310
|
-
return
|
311
|
-
|
312
|
-
def
|
313
|
-
return
|
314
|
-
|
315
|
-
def
|
316
|
-
return
|
317
|
-
|
318
|
-
def
|
319
|
-
return list(
|
320
|
-
|
321
|
-
def
|
322
|
-
return list(
|
323
|
-
|
324
|
-
def
|
325
|
-
return
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
348
|
+
def __init__(экземпляр, *ПА, **ИА):
|
349
|
+
экземпляр._user_dict = collections.UserDict(*ПА, **ИА)
|
350
|
+
|
351
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
352
|
+
return экземпляр._user_dict.get(ключ, по_умолчанию)
|
353
|
+
|
354
|
+
def Установить_по_умолчанию(экземпляр, ключ, по_умолчанию = None):
|
355
|
+
return экземпляр._user_dict.setdefault(ключ, по_умолчанию)
|
356
|
+
|
357
|
+
def Удалить(экземпляр, ключ, по_умолчанию = None):
|
358
|
+
return экземпляр._user_dict.pop(ключ, по_умолчанию)
|
359
|
+
|
360
|
+
def Удалить_последний(экземпляр, последний = True):
|
361
|
+
return экземпляр._user_dict.popitem(last = последний)
|
362
|
+
|
363
|
+
def __getitem__(экземпляр, ключ):
|
364
|
+
return экземпляр._user_dict[ключ]
|
365
|
+
|
366
|
+
def __setitem__(экземпляр, ключ, значение):
|
367
|
+
экземпляр._user_dict[ключ] = значение
|
368
|
+
|
369
|
+
def __delitem__(экземпляр, ключ):
|
370
|
+
del экземпляр._user_dict[ключ]
|
371
|
+
|
372
|
+
def __iter__(экземпляр):
|
373
|
+
return iter(экземпляр._user_dict)
|
374
|
+
|
375
|
+
def __len__(экземпляр):
|
376
|
+
return len(экземпляр._user_dict)
|
377
|
+
|
378
|
+
def __contains__(экземпляр, ключ):
|
379
|
+
return ключ in экземпляр._user_dict
|
380
|
+
|
381
|
+
def Ключи(экземпляр):
|
382
|
+
return list(экземпляр._user_dict.keys())
|
383
|
+
|
384
|
+
def Значения(экземпляр):
|
385
|
+
return list(экземпляр._user_dict.values())
|
386
|
+
|
387
|
+
def Элементы(экземпляр):
|
388
|
+
return list(экземпляр._user_dict.items())
|
389
|
+
|
390
|
+
def __str__(экземпляр):
|
391
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._user_dict.items())
|
392
|
+
return f"Собственный_словарь({{{элементы}}})"
|
393
|
+
|
394
|
+
class Собственный_список(_Изменяемая_последовательность):
|
395
|
+
def __init__(экземпляр, перебираемый = None):
|
396
|
+
экземпляр._user_list = collections.UserList(перебираемый or [])
|
397
|
+
|
398
|
+
def Добавить(экземпляр, элемент):
|
399
|
+
экземпляр._user_list.append(элемент)
|
400
|
+
|
401
|
+
def Вставить(экземпляр, индекс, элемент):
|
402
|
+
экземпляр._user_list.insert(индекс, элемент)
|
403
|
+
|
404
|
+
def Удалить(экземпляр, индекс = None):
|
338
405
|
if индекс is None:
|
339
|
-
return
|
340
|
-
return
|
341
|
-
|
342
|
-
def Очистить(
|
343
|
-
|
344
|
-
|
345
|
-
def Количество(
|
346
|
-
return
|
347
|
-
|
348
|
-
def Индекс(
|
349
|
-
return
|
350
|
-
|
351
|
-
def
|
352
|
-
|
353
|
-
|
354
|
-
def
|
355
|
-
|
356
|
-
|
357
|
-
def
|
358
|
-
|
359
|
-
|
360
|
-
def
|
361
|
-
return
|
362
|
-
|
363
|
-
def
|
364
|
-
|
365
|
-
|
366
|
-
def
|
367
|
-
|
368
|
-
|
369
|
-
def
|
370
|
-
return
|
371
|
-
|
372
|
-
def
|
373
|
-
return
|
406
|
+
return экземпляр._user_list.pop()
|
407
|
+
return экземпляр._user_list.pop(индекс)
|
408
|
+
|
409
|
+
def Очистить(экземпляр):
|
410
|
+
экземпляр._user_list.clear()
|
411
|
+
|
412
|
+
def Количество(экземпляр, элемент):
|
413
|
+
return экземпляр._user_list.count(элемент)
|
414
|
+
|
415
|
+
def Индекс(экземпляр, элемент, начало = 0, конец = None):
|
416
|
+
return экземпляр._user_list.index(элемент, начало, конец or len(экземпляр._user_list))
|
417
|
+
|
418
|
+
def Сортировать(экземпляр, ключ = None, по_убыванию = False):
|
419
|
+
экземпляр._user_list.sort(key = ключ, reverse = по_убыванию)
|
420
|
+
|
421
|
+
def Перевернуть(экземпляр):
|
422
|
+
экземпляр._user_list.reverse()
|
423
|
+
|
424
|
+
def Расширить(экземпляр, перебираемый):
|
425
|
+
экземпляр._user_list.extend(перебираемый)
|
426
|
+
|
427
|
+
def __getitem__(экземпляр, индекс):
|
428
|
+
return экземпляр._user_list[индекс]
|
429
|
+
|
430
|
+
def __setitem__(экземпляр, индекс, значение):
|
431
|
+
экземпляр._user_list[индекс] = значение
|
432
|
+
|
433
|
+
def __delitem__(экземпляр, индекс):
|
434
|
+
del экземпляр._user_list[индекс]
|
435
|
+
|
436
|
+
def __len__(экземпляр):
|
437
|
+
return len(экземпляр._user_list)
|
438
|
+
|
439
|
+
def __iter__(экземпляр):
|
440
|
+
return iter(экземпляр._user_list)
|
441
|
+
|
442
|
+
def __contains__(экземпляр, элемент):
|
443
|
+
return элемент in экземпляр._user_list
|
444
|
+
|
445
|
+
def __reversed__(экземпляр):
|
446
|
+
return reversed(экземпляр._user_list)
|
447
|
+
|
448
|
+
def __str__(экземпляр):
|
449
|
+
return f"Собственный_список({list(экземпляр._user_list)})"
|
374
450
|
|
375
451
|
class Собственная_строка(_Последовательность):
|
376
|
-
def __init__(
|
377
|
-
|
378
|
-
|
379
|
-
def
|
380
|
-
return
|
381
|
-
|
382
|
-
def
|
383
|
-
return
|
384
|
-
|
385
|
-
def
|
386
|
-
return
|
387
|
-
|
388
|
-
def
|
389
|
-
return
|
390
|
-
|
391
|
-
def
|
392
|
-
return
|
393
|
-
|
394
|
-
def
|
395
|
-
return
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
452
|
+
def __init__(экземпляр, строка = ""):
|
453
|
+
экземпляр._user_string = collections.UserString(строка)
|
454
|
+
|
455
|
+
def Разделить(экземпляр, разделитель = None):
|
456
|
+
return экземпляр._user_string.split(разделитель)
|
457
|
+
|
458
|
+
def Соединить(экземпляр, перебираемый):
|
459
|
+
return экземпляр._user_string.join(перебираемый)
|
460
|
+
|
461
|
+
def В_верхний_регистр(экземпляр):
|
462
|
+
return Собственная_строка(экземпляр._user_string.upper())
|
463
|
+
|
464
|
+
def В_нижний_регистр(экземпляр):
|
465
|
+
return Собственная_строка(экземпляр._user_string.lower())
|
466
|
+
|
467
|
+
def Начинается_с(экземпляр, префикс):
|
468
|
+
return экземпляр._user_string.startswith(префикс)
|
469
|
+
|
470
|
+
def Заканчивается_на(экземпляр, суффикс):
|
471
|
+
return экземпляр._user_string.endswith(суффикс)
|
472
|
+
|
473
|
+
def __getitem__(экземпляр, индекс):
|
474
|
+
return экземпляр._user_string[индекс]
|
475
|
+
|
476
|
+
def __len__(экземпляр):
|
477
|
+
return len(экземпляр._user_string)
|
478
|
+
|
479
|
+
def __iter__(экземпляр):
|
480
|
+
return iter(экземпляр._user_string)
|
481
|
+
|
482
|
+
def __contains__(экземпляр, элемент):
|
483
|
+
return элемент in экземпляр._user_string
|
484
|
+
|
485
|
+
def __reversed__(экземпляр):
|
486
|
+
return reversed(экземпляр._user_string)
|
487
|
+
|
488
|
+
def __str__(экземпляр):
|
489
|
+
return str(экземпляр._user_string)
|
490
|
+
|
491
|
+
class Собственное_множество(_Изменяемое_множество):
|
492
|
+
def __init__(экземпляр, перебираемый = None):
|
493
|
+
экземпляр._set = set(перебираемый or [])
|
494
|
+
|
495
|
+
def Добавить(экземпляр, элемент):
|
496
|
+
экземпляр._set.add(элемент)
|
497
|
+
|
498
|
+
def Удалить(экземпляр, элемент):
|
405
499
|
try:
|
406
|
-
|
500
|
+
экземпляр._set.remove(элемент)
|
407
501
|
except KeyError:
|
408
502
|
raise KeyError(f"Элемент {элемент} не найден")
|
409
|
-
|
410
|
-
def Отбросить(
|
411
|
-
|
412
|
-
|
413
|
-
def Очистить(
|
414
|
-
|
415
|
-
|
416
|
-
def
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
503
|
+
|
504
|
+
def Отбросить(экземпляр, элемент):
|
505
|
+
экземпляр._set.discard(элемент)
|
506
|
+
|
507
|
+
def Очистить(экземпляр):
|
508
|
+
экземпляр._set.clear()
|
509
|
+
|
510
|
+
def Объединить(экземпляр, другой):
|
511
|
+
if isinstance(другой, Собственное_множество):
|
512
|
+
return Собственное_множество(экземпляр._set | другой._set)
|
513
|
+
return NotImplemented
|
514
|
+
|
515
|
+
def Пересечь(экземпляр, другой):
|
516
|
+
if isinstance(другой, Собственное_множество):
|
517
|
+
return Собственное_множество(экземпляр._set & другой._set)
|
518
|
+
return NotImplemented
|
519
|
+
|
520
|
+
def Разность(экземпляр, другой):
|
521
|
+
if isinstance(другой, Собственное_множество):
|
522
|
+
return Собственное_множество(экземпляр._set - другой._set)
|
523
|
+
return NotImplemented
|
524
|
+
|
525
|
+
def Симметрическая_разность(экземпляр, другой):
|
526
|
+
if isinstance(другой, Собственное_множество):
|
527
|
+
return Собственное_множество(экземпляр._set ^ другой._set)
|
528
|
+
return NotImplemented
|
529
|
+
|
530
|
+
def __contains__(экземпляр, элемент):
|
531
|
+
return элемент in экземпляр._set
|
532
|
+
|
533
|
+
def __iter__(экземпляр):
|
534
|
+
return iter(экземпляр._set)
|
535
|
+
|
536
|
+
def __len__(экземпляр):
|
537
|
+
return len(экземпляр._set)
|
538
|
+
|
539
|
+
def __or__(экземпляр, другой):
|
540
|
+
return экземпляр.Объединить(другой)
|
541
|
+
|
542
|
+
def __and__(экземпляр, другой):
|
543
|
+
return экземпляр.Пересечь(другой)
|
544
|
+
|
545
|
+
def __sub__(экземпляр, другой):
|
546
|
+
return экземпляр.Разность(другой)
|
547
|
+
|
548
|
+
def __xor__(экземпляр, другой):
|
549
|
+
return экземпляр.Симметрическая_разность(другой)
|
550
|
+
|
551
|
+
def __str__(экземпляр):
|
552
|
+
элементы = ', '.join(str(x) for x in экземпляр._set)
|
553
|
+
return f"Собственное_множество({{{элементы}}})"
|
554
|
+
|
555
|
+
def В_строку(экземпляр):
|
556
|
+
длина = len(экземпляр._set)
|
557
|
+
if длина == 0:
|
558
|
+
return "Пустое множество"
|
559
|
+
return f"Множество с {__Общие_функции__.Склонение_после_числительного(длина, ['элементом', 'элементами', 'элементами'])}: {{{', '.join(str(x) for x in экземпляр._set)}}}"
|