rupython 1.2.11__py3-none-any.whl → 1.2.12__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.
Files changed (15) hide show
  1. 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
  2. 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
  3. 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 +5 -20
  4. 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 +18 -5
  5. 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
  6. 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 +279 -146
  7. 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
  8. 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
  9. 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 +9 -9
  10. {rupython-1.2.11.dist-info → rupython-1.2.12.dist-info}/METADATA +2 -2
  11. rupython-1.2.12.dist-info/RECORD +19 -0
  12. rupython-1.2.11.dist-info/RECORD +0 -15
  13. {rupython-1.2.11.dist-info → rupython-1.2.12.dist-info}/LICENSE +0 -0
  14. {rupython-1.2.11.dist-info → rupython-1.2.12.dist-info}/WHEEL +0 -0
  15. {rupython-1.2.11.dist-info → rupython-1.2.12.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,177 @@
1
+ import queue
2
+ from rupython import __Общие_функции__
3
+
4
+ Очередь_пуста = queue.Empty
5
+ Очередь_полна = queue.Full
6
+
7
+ Словарь_параметров = {
8
+ 'максимальный_размер': 'maxsize',
9
+ 'элемент': 'item',
10
+ 'блоковать': 'block',
11
+ 'таймаут': 'timeout',
12
+ 'приоритет': 'priority'
13
+ }
14
+
15
+ Словарь_склонений = {
16
+ 'элемент': ['элемент', 'элемента', 'элементов'],
17
+ 'задача': ['задача', 'задачи', 'задач']
18
+ }
19
+
20
+ class Очередь:
21
+ def __init__(здесь, максимальный_размер = 0):
22
+ kwargs = {'maxsize': максимальный_размер}
23
+ здесь._queue = queue.Queue(**kwargs)
24
+
25
+ def Добавить(здесь, элемент, блоковать = True, таймаут = None):
26
+ kwargs = {'item': элемент, 'block': блоковать}
27
+ if таймаут is not None:
28
+ kwargs['timeout'] = таймаут
29
+ здесь._queue.put(**kwargs)
30
+
31
+ def Добавить_без_блокования(здесь, элемент):
32
+ здесь._queue.put_nowait(элемент)
33
+
34
+ def Получить(здесь, блоковать = True, таймаут = None):
35
+ kwargs = {'block': блоковать}
36
+ if таймаут is not None:
37
+ kwargs['timeout'] = таймаут
38
+ return здесь._queue.get(**kwargs)
39
+
40
+ def Получить_без_блокования(здесь):
41
+ return здесь._queue.get_nowait()
42
+
43
+ def Задача_выполнена(здесь):
44
+ здесь._queue.task_done()
45
+
46
+ def Ждать_завершения(здесь):
47
+ здесь._queue.join()
48
+
49
+ def Пустая(здесь):
50
+ return здесь._queue.empty()
51
+
52
+ def Полная(здесь):
53
+ return здесь._queue.full()
54
+
55
+ def Размер(здесь):
56
+ return здесь._queue.qsize()
57
+
58
+ def __len__(здесь):
59
+ return здесь._queue.qsize()
60
+
61
+ def __str__(здесь):
62
+ размер = здесь.Размер()
63
+ return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
64
+
65
+ def В_строку_с_задачами(здесь):
66
+ размер = здесь.Размер()
67
+ return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
68
+
69
+ class Стековая_очередь:
70
+ def __init__(здесь, максимальный_размер = 0):
71
+ kwargs = {'maxsize': максимальный_размер}
72
+ здесь._queue = queue.LifoQueue(**kwargs)
73
+
74
+ def Добавить(здесь, элемент, блоковать = True, таймаут = None):
75
+ kwargs = {'item': элемент, 'block': блоковать}
76
+ if таймаут is not None:
77
+ kwargs['timeout'] = таймаут
78
+ здесь._queue.put(**kwargs)
79
+
80
+ def Добавить_без_блокования(здесь, элемент):
81
+ здесь._queue.put_nowait(элемент)
82
+
83
+ def Получить(здесь, блоковать = True, таймаут = None):
84
+ kwargs = {'block': блоковать}
85
+ if таймаут is not None:
86
+ kwargs['timeout'] = таймаут
87
+ return здесь._queue.get(**kwargs)
88
+
89
+ def Получить_без_блокования(здесь):
90
+ return здесь._queue.get_nowait()
91
+
92
+ def Задача_выполнена(здесь):
93
+ здесь._queue.task_done()
94
+
95
+ def Ждать_завершения(здесь):
96
+ здесь._queue.join()
97
+
98
+ def Пустая(здесь):
99
+ return здесь._queue.empty()
100
+
101
+ def Полная(здесь):
102
+ return здесь._queue.full()
103
+
104
+ def Размер(здесь):
105
+ return здесь._queue.qsize()
106
+
107
+ def __len__(здесь):
108
+ return здесь._queue.qsize()
109
+
110
+ def __str__(здесь):
111
+ размер = здесь.Размер()
112
+ return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
113
+
114
+ def В_строку_с_задачами(здесь):
115
+ размер = здесь.Размер()
116
+ return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
117
+
118
+ class Приоритетная_очередь:
119
+ def __init__(здесь, максимальный_размер = 0):
120
+ kwargs = {'maxsize': максимальный_размер}
121
+ здесь._queue = queue.PriorityQueue(**kwargs)
122
+
123
+ def Добавить(здесь, элемент, приоритет, блоковать = True, таймаут = None):
124
+ kwargs = {'item': (приоритет, элемент), 'block': блоковать}
125
+ if таймаут is not None:
126
+ kwargs['timeout'] = таймаут
127
+ здесь._queue.put(**kwargs)
128
+
129
+ def Добавить_без_блокования(здесь, элемент, приоритет):
130
+ здесь._queue.put_nowait((приоритет, элемент))
131
+
132
+ def Получить(здесь, блоковать = True, таймаут = None):
133
+ kwargs = {'block': блоковать}
134
+ if таймаут is not None:
135
+ kwargs['timeout'] = таймаут
136
+ приоритет, элемент = здесь._queue.get(**kwargs)
137
+ return элемент
138
+
139
+ def Получить_с_приоритетом(здесь, блоковать = True, таймаут = None):
140
+ kwargs = {'block': блоковать}
141
+ if таймаут is not None:
142
+ kwargs['timeout'] = таймаут
143
+ return здесь._queue.get(**kwargs)
144
+
145
+ def Получить_без_блокования(здесь):
146
+ приоритет, элемент = здесь._queue.get_nowait()
147
+ return элемент
148
+
149
+ def Получить_без_блокования_с_приоритетом(здесь):
150
+ """Возвращает кортеж (приоритет, элемент)."""
151
+ return здесь._queue.get_nowait()
152
+
153
+ def Задача_выполнена(здесь):
154
+ здесь._queue.task_done()
155
+
156
+ def Ждать_завершения(здесь):
157
+ здесь._queue.join()
158
+
159
+ def Пустая(здесь):
160
+ return здесь._queue.empty()
161
+
162
+ def Полная(здесь):
163
+ return здесь._queue.full()
164
+
165
+ def Размер(здесь):
166
+ return здесь._queue.qsize()
167
+
168
+ def __len__(здесь):
169
+ return здесь._queue.qsize()
170
+
171
+ def __str__(здесь):
172
+ размер = здесь.Размер()
173
+ return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
174
+
175
+ def В_строку_с_задачами(здесь):
176
+ размер = здесь.Размер()
177
+ return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
@@ -0,0 +1,273 @@
1
+ import threading
2
+ from rupython import __Общие_функции__
3
+
4
+ Ошибка_потока = threading.ThreadError
5
+
6
+ Словарь_параметров = {
7
+ 'цель': 'target',
8
+ 'имя': 'name',
9
+ 'аргументы': 'args',
10
+ 'именовАргументы': 'kwargs',
11
+ 'после_окончания': 'daemon',
12
+ 'время_ожидания': 'timeout',
13
+ 'количество': 'count',
14
+ 'действие': 'action',
15
+ 'блоковать': 'block',
16
+ 'обратный_вызов': 'callback',
17
+ 'аргументыОбрВыз': 'callback_args',
18
+ 'именовАргументыОбрВыз': 'callback_kwargs',
19
+ 'интервал': 'interval'
20
+ }
21
+
22
+ Словарь_склонений = {
23
+ 'поток': ['поток', 'потока', 'потоков'],
24
+ 'ресурс': ['ресурс', 'ресурса', 'ресурсов'],
25
+ 'участник': ['участник', 'участника', 'участников']
26
+ }
27
+
28
+ class Поток:
29
+ def __init__(здесь, цель = None, имя = None, аргументы = (), именовАргументы = None, после_окончания = None):
30
+ ИА = {}
31
+ if цель is not None:
32
+ ИА['target'] = цель
33
+ if имя is not None:
34
+ ИА['name'] = имя
35
+ if аргументы:
36
+ ИА['args'] = аргументы
37
+ if именовАргументы is not None:
38
+ ИА['kwargs'] = именовАргументы
39
+ if после_окончания is not None:
40
+ ИА['daemon'] = после_окончания
41
+ здесь._thread = threading.Thread(**ИА)
42
+
43
+ def Начать(здесь):
44
+ здесь._thread.start()
45
+
46
+ def Ждать(здесь, время_ожидания = None):
47
+ ИА = {}
48
+ if время_ожидания is not None:
49
+ ИА['timeout'] = время_ожидания
50
+ здесь._thread.join(**kwargs)
51
+
52
+ def Живой(здесь):
53
+ return здесь._thread.is_alive()
54
+
55
+ def Получить_имя(здесь):
56
+ return здесь._thread.getName()
57
+
58
+ def Установить_имя(здесь, имя):
59
+ здесь._thread.setName(имя)
60
+
61
+ def Получить_идентификатор(здесь):
62
+ return здесь._thread.ident
63
+
64
+ def После_окончания(здесь):
65
+ return здесь._thread.daemon
66
+
67
+ def Установить_после_окончания(здесь, после_окончания):
68
+ здесь._thread.daemon = после_окончания
69
+
70
+ def __str__(здесь):
71
+ return f"Поток(имя={здесь.Получить_имя()}, живой={здесь.Живой()})"
72
+
73
+ class Блокование:
74
+ def __init__(здесь):
75
+ здесь._lock = threading.Lock()
76
+
77
+ def Захватить(здесь, блоковать = True, время_ожидания = None):
78
+ ИА = {'block': блоковать}
79
+ if время_ожидания is not None:
80
+ ИА['timeout'] = время_ожидания
81
+ return здесь._lock.acquire(**ИА)
82
+
83
+ def Освободить(здесь):
84
+ здесь._lock.release()
85
+
86
+ def Захвачено(здесь):
87
+ return здесь._lock.locked()
88
+
89
+ def __enter__(здесь):
90
+ здесь.Захватить()
91
+ return здесь
92
+
93
+ def __exit__(здесь, тип_исключения, значение_исключения, трассировка):
94
+ здесь.Освободить()
95
+
96
+ def __str__(здесь):
97
+ return f"Блокование(захвачено={здесь.Захвачено()})"
98
+
99
+ class Повторное_блокование:
100
+ def __init__(здесь):
101
+ здесь._rlock = threading.RLock()
102
+
103
+ def Захватить(здесь, блоковать = True, время_ожидания = None):
104
+ ИА = {'block': блоковать}
105
+ if время_ожидания is not None:
106
+ ИА['timeout'] = время_ожидания
107
+ return здесь._rlock.acquire(**ИА)
108
+
109
+ def Освободить(здесь):
110
+ здесь._rlock.release()
111
+
112
+ def __enter__(здесь):
113
+ здесь.Захватить()
114
+ return здесь
115
+
116
+ def __exit__(здесь, тип_исключения, значение_исключения, трассировка):
117
+ здесь.Освободить()
118
+
119
+ def __str__(здесь):
120
+ return f"Повторное_блокование(владелец={здесь._rlock._owner}, счётчик={здесь._rlock._count})"
121
+
122
+ class Семафор:
123
+ def __init__(здесь, количество = 1):
124
+ ИА = {'value': количество}
125
+ здесь._semaphore = threading.Semaphore(**ИА)
126
+
127
+ def Захватить(здесь, блоковать = True, время_ожидания = None):
128
+ ИА = {'block': блоковать}
129
+ if время_ожидания is not None:
130
+ ИА['timeout'] = время_ожидания
131
+ return здесь._semaphore.acquire(**ИА)
132
+
133
+ def Освободить(здесь):
134
+ здесь._semaphore.release()
135
+
136
+ def __enter__(здесь):
137
+ здесь.Захватить()
138
+ return здесь
139
+
140
+ def __exit__(здесь, тип_исключения, значение_исключения, трассировка):
141
+ здесь.Освободить()
142
+
143
+ def __str__(здесь):
144
+ return f"Семафор(ресурсов={здесь._semaphore._value})"
145
+
146
+ class Ограниченный_семафор(Семафор):
147
+ def __init__(здесь, количество = 1):
148
+ ИА = {'value': количество}
149
+ здесь._semaphore = threading.BoundedSemaphore(**ИА)
150
+
151
+ class Событие:
152
+ def __init__(здесь):
153
+ здесь._event = threading.Event()
154
+
155
+ def Установить(здесь):
156
+ здесь._event.set()
157
+
158
+ def Сбросить(здесь):
159
+ здесь._event.clear()
160
+
161
+ def Активно(здесь):
162
+ return здесь._event.is_set()
163
+
164
+ def Ждать(здесь, время_ожидания = None):
165
+ ИА = {}
166
+ if время_ожидания is not None:
167
+ ИА['timeout'] = время_ожидания
168
+ return здесь._event.wait(**ИА)
169
+
170
+ def __str__(здесь):
171
+ return f"Событие(активно={здесь.Активно()})"
172
+
173
+ class Условие:
174
+ def __init__(здесь, блокование = None):
175
+ ИА = {}
176
+ if блокование is not None:
177
+ ИА['lock'] = блокование._lock if isinstance(блокование, (Блокование, Повторное_блокование)) else блокование
178
+ здесь._condition = threading.Condition(**ИА)
179
+
180
+ def Захватить(здесь):
181
+ return здесь._condition.acquire()
182
+
183
+ def Освободить(здесь):
184
+ здесь._condition.release()
185
+
186
+ def Ждать(здесь, время_ожидания = None):
187
+ ИА = {}
188
+ if время_ожидания is not None:
189
+ ИА['timeout'] = время_ожидания
190
+ return здесь._condition.wait(**ИА)
191
+
192
+ def Уведомить(здесь, количество = 1):
193
+ ИА = {'n': количество}
194
+ здесь._condition.notify(**ИА)
195
+
196
+ def Уведомить_все(здесь):
197
+ здесь._condition.notify_all()
198
+
199
+ def __enter__(здесь):
200
+ здесь.Захватить()
201
+ return здесь
202
+
203
+ def __exit__(здесь, тип_исключения, значение_исключения, трассировка):
204
+ здесь.Освободить()
205
+
206
+ def __str__(здесь):
207
+ return f"Условие(захвачено={здесь._condition._is_owned()})"
208
+
209
+ class Барьер:
210
+ def __init__(здесь, количество, действие = None, время_ожидания = None):
211
+ ИА = {'parties': количество}
212
+ if действие is not None:
213
+ ИА['action'] = действие
214
+ if время_ожидания is not None:
215
+ ИА['timeout'] = время_ожидания
216
+ здесь._barrier = threading.Barrier(**ИА)
217
+
218
+ def Ждать(здесь, время_ожидания = None):
219
+ ИА = {}
220
+ if время_ожидания is not None:
221
+ ИА['timeout'] = время_ожидания
222
+ return здесь._barrier.wait(**ИА)
223
+
224
+ def Сбросить(здесь):
225
+ здесь._barrier.reset()
226
+
227
+ def Прервать(здесь):
228
+ здесь._barrier.abort()
229
+
230
+ def Количество_участников(здесь):
231
+ return здесь._barrier.parties
232
+
233
+ def Количество_ожидающих(здесь):
234
+ return здесь._barrier.n_waiting
235
+
236
+ def Сломан(здесь):
237
+ return здесь._barrier.broken
238
+
239
+ def __str__(здесь):
240
+ return f"Барьер({__Общие_функции__.Склонение_после_числительного(здесь.Количество_ожидающих(), Словарь_склонений['участник'])} из {здесь.Количество_участников()})"
241
+
242
+ class Таймер(Поток):
243
+ def __init__(здесь, интервал, цель, аргументы = (), именовАргументы = None, обратный_вызов = None, аргументыОбрВыз = (), именовАргументыОбрВыз = None):
244
+ ИА = {'interval': интервал, 'function': цель}
245
+ if аргументы:
246
+ ИА['args'] = аргументы
247
+ if именовАргументы is not None:
248
+ ИА['kwargs'] = именовАргументы
249
+ здесь._timer = threading.Timer(**ИА)
250
+ здесь._callback = обратный_вызов
251
+ здесь._callback_args = аргументыОбрВыз
252
+ здесь._callback_kwargs = именовАргументыОбрВыз or {}
253
+
254
+ def Отменить(здесь):
255
+ здесь._timer.cancel()
256
+
257
+ def Завершён(здесь):
258
+ return здесь._timer.finished.is_set()
259
+
260
+ def __str__(здесь):
261
+ return f"Таймер(интервал={здесь._timer.interval}, завершён={здесь.Завершён()})"
262
+
263
+ def Текущий_поток():
264
+ return Поток(цель = lambda: None, имя = threading.current_thread().getName())
265
+
266
+ def Количество_активных_потоков():
267
+ return threading.active_count()
268
+
269
+ def Перечислить_потоки():
270
+ return [Поток(цель = lambda: None, имя = поток.getName()) for поток in threading.enumerate()]
271
+
272
+ def Получить_основной_поток():
273
+ return Поток(цель = lambda: None, имя = threading.main_thread().getName())
@@ -87,14 +87,14 @@ class Соответствие:
87
87
 
88
88
  Флаги = re.RegexFlag
89
89
 
90
- def Создать(шаблон, флаги = 0): рез = re.compile(шаблон, flags=флаги); return Шаблон(re.compile(рез)) if type(рез) == re.Pattern else рез
91
- def Поиск(шаблон, строка, флаги = 0): return re.search(шаблон, строка, flags=флаги)
92
- def СовпадНач(шаблон, строка, флаги = 0): return re.match(шаблон, строка, flags=флаги)
93
- def ПолнСоотв(шаблон, строка, флаги = 0): return re.fullmatch(шаблон, строка, flags=флаги)
94
- def Разбить(шаблон, строка, макс_делений = 0, флаги = 0): return re.split(шаблон, строка, maxsplit=макс_делений, flags=флаги)
95
- def НайтиВсё(шаблон, строка, флаги = 0): return re.findall(шаблон, строка, flags=флаги)
96
- def ИскатьПеречисл(шаблон, строка, флаги = 0): return re.finditer(шаблон, строка, flags=флаги)
97
- def Заменить(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count=количество, flags=флаги)
98
- def ЗаменитьСч(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count=количество, flags=флаги)
90
+ def Создать(шаблон, флаги = 0): рез = re.compile(шаблон, flags = флаги); return Шаблон(re.compile(рез)) if type(рез) == re.Pattern else рез
91
+ def Поиск(шаблон, строка, флаги = 0): return re.search(шаблон, строка, flags = флаги)
92
+ def СовпадНач(шаблон, строка, флаги = 0): return re.match(шаблон, строка, flags = флаги)
93
+ def ПолнСоотв(шаблон, строка, флаги = 0): return re.fullmatch(шаблон, строка, flags = флаги)
94
+ def Разбить(шаблон, строка, макс_делений = 0, флаги = 0): return re.split(шаблон, строка, maxsplit = макс_делений, flags = флаги)
95
+ def НайтиВсё(шаблон, строка, флаги = 0): return re.findall(шаблон, строка, flags = флаги)
96
+ def ИскатьПеречисл(шаблон, строка, флаги = 0): return re.finditer(шаблон, строка, flags = флаги)
97
+ def Заменить(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count = количество, flags = флаги)
98
+ def ЗаменитьСч(шаблон, замена, количество = 0, флаги = 0): return re.sub(шаблон, замена, строка, count = количество, flags = флаги)
99
99
  def ЭкранШабл(шаблон): return re.escape(шаблон)
100
100
  def ОчиститьКэш(): return re.purge()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.2.11
3
+ Version: 1.2.12
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -240,7 +240,7 @@ x = 0
240
240
 
241
241
  ##### Контекстный менеджер
242
242
  ```
243
- ВКонтексте Открыть('Файл.дан', 'r') как файл:
243
+ Используя Открыть('Файл.дан', 'r') как файл:
244
244
  Пока стр := файл.Читать_строку():
245
245
  Вывести(стр.Удалить_по_бокам())
246
246
  ```
@@ -0,0 +1,19 @@
1
+ rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
2
+ rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
+ rupython/__Общие_функции__.py,sha256=MH9QLcXqeFmpOS5_N8P5wA5eCYutlHRc7YUatn3CUIk,1255
4
+ rupython/Преобразователь.py,sha256=ZRTJnKOLG-ckVifnKQQwAKyDCKo4j8qHbyIlwOAbTD4,48431
5
+ rupython/Модули/Асинхр.py,sha256=Tzn_JzxhcfXTOEBxoaTTt6YmhkvKM92uSKmw6Kng-mE,9125
6
+ rupython/Модули/БД.py,sha256=_YMD2yLo9fmHqp7bodiqe8s6gSQN2sjFGoxwoKZ67dw,29237
7
+ rupython/Модули/ДатаВремя.py,sha256=8S1ss-Ow2gXDLMEBEE4jQmONJ1frwNotIS0jSuezYj0,25571
8
+ rupython/Модули/Коллекции.py,sha256=csJKFIEJhq_wW7o7eHEFbU4nXlfaGC9jzBxfClhM6Dg,23154
9
+ rupython/Модули/Куча.py,sha256=dhvdf0nhk3rX1jwvuXg02Z7AiqnDEi-62EYY4TNWm3M,3273
10
+ rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
11
+ rupython/Модули/Очередь.py,sha256=9-A2DOQe2m79EsysDOhup_IG3D2iLBdj7iTY6RO7L-s,7846
12
+ rupython/Модули/Потоки.py,sha256=2TwXkg-Vd0yDJPIt_PkfnDz01bsUsBICI0YvZDUPpgI,11342
13
+ rupython/Модули/РегВыр.py,sha256=lLUyF7AJoe0XPG2KdS2TlfOUEmcjxMqwyeVR7TQQHys,6365
14
+ rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
15
+ rupython-1.2.12.dist-info/LICENSE,sha256=vTQDUsS-xxBMZEA2avkNBOGb58hRM-WHr8Getk-XTqQ,11780
16
+ rupython-1.2.12.dist-info/METADATA,sha256=YnWjc3Vy_Hf8TfcV30DG5vIh70ubYKdiv4FTrxLk3jU,30169
17
+ rupython-1.2.12.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
18
+ rupython-1.2.12.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
19
+ rupython-1.2.12.dist-info/RECORD,,
@@ -1,15 +0,0 @@
1
- rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
2
- rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
- rupython/__Общие_функции__.py,sha256=eiDtxw8MVlZ8rZZC2N-NkYqmf2F-XCczHubUnzVKWJA,856
4
- rupython/Преобразователь.py,sha256=ZRTJnKOLG-ckVifnKQQwAKyDCKo4j8qHbyIlwOAbTD4,48431
5
- rupython/Модули/БД.py,sha256=QA-Z0VPXliFuyHFvJv0hKGhanF9XWNjrwR70sGgfk5c,30310
6
- rupython/Модули/ДатаВремя.py,sha256=YdpACxtHXt57zV7uYpZJZeH3T4bMd6orud-Y34DqWTI,25087
7
- rupython/Модули/Коллекции.py,sha256=pJ1L38_8lF9VRvXQhUPPGu49tJkYlpR_3sC-ruxYsCU,16830
8
- rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
9
- rupython/Модули/РегВыр.py,sha256=T3yxVP-B5AwAzbUTjWpog3HCzRTGLZ58CEQpfA-0dsY,6341
10
- rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
11
- rupython-1.2.11.dist-info/LICENSE,sha256=vTQDUsS-xxBMZEA2avkNBOGb58hRM-WHr8Getk-XTqQ,11780
12
- rupython-1.2.11.dist-info/METADATA,sha256=AcNdWamkDB-I2YrOnkIN-F1TqNcQNXzEdaI_joFLjrQ,30171
13
- rupython-1.2.11.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
14
- rupython-1.2.11.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
15
- rupython-1.2.11.dist-info/RECORD,,