Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594

Контейнер на Замыкании

28.12.2023, 19:40. Показов 606. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
- Всем доброго времени суток!
- Мой вопрос адресован знающим Замыкания и работу с Типами Данных.
Сделал себе Контейнер на основе Замыкания (см. пример ниже). Многое подсмотрел в Роликах:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def Cont_closure(el_type: type, size: int = 1):  # Контейнер (замыкание)
    # (собственно Контейнер (заданных Типа и Размера))
    cont_closure = [el_type() for _ in range(size)]
 
    def inner(value: el_type, ind: int = 0):  # внутренняя ф-ция
        # (проверка Индекса)
        if ind < 0 or ind >= size:
            print('Ошибка - Неверный Индекс контейнера!')
        # ------------------------------------
        # (занесение)
        cont_closure[ind] = el_type(value)
        # ------------------------------------
 
    return inner
 
 
# =====Container]====================================================================
class Container:  # класс - Контейнер (обертка замыкания)
    def __init__(self, el_type: type = int, size: int = 1):
        # (Элемент Контейнера)
        self.el_type = el_type  # Тип
        self.size = size  # Число
        # ----------------------------------------------
        # (экземпляр Замыкания)
        self.clos = Cont_closure(self.el_type, size)
        # ----------------------------------------------
 
    # ==== ((( Установка и Получение )))======================================================
    def set_cont(self, value, ind: int = 0):  # установить - Значение (по Индексу)
        self.clos(self.el_type(value), ind)
 
    def get_cont(self, ind: int = 0) -> type:  # получить - Значение (по Индексу)
        return self.clos.__closure__[0].cell_contents[ind]  # (параметры: - type (0), - size (1))
 
    # ==== ((( Инкремент и Декремент )))======================================================
    def incr_cont(self):  # Увеличить текущее Значение
        val = self.get_cont()
        self.set_cont(val + 1)  # (val - подсвечивает !!!)
 
    def decr_cont(self):  # Уменьшить текущее Значение
        val = self.get_cont()
        self.set_cont(val - 1)  # (val - подсвечивает !!!)
- Все работает прекрасно. Однако, PyCharm подсвечивает Аргументы-'val' в двух местах указанных Комментариями!
Может я делаю что-то НЕ ТАК? Или может быть Вы сделали бы все это ПО-ДРУГОМУ. Тогда КАК и ПОЧЕМУ ?

- Заранее Всем Благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.12.2023, 19:40
Ответы с готовыми решениями:

Переменные в замыкании
В этом коде переменная abc увеличивается при каждом вызове v(); var v = Met1(11); Console.WriteLine ( v(22).Invoke(33) ); ...

Найти среднее арифметическое и добавить его в контейнер (контейнер map), тип элементов int
помогите пожалуйста, завтра надо сдавать, скину денег если шо

Заменить контейнер vector, использовавшийся для хранения текстовых строк (листинг 2.3), на контейнер list
Здравствуйте форумчане, может кто объяснить как делать это задание и что собственно мы тут вообще делаем. сам листинг 2.3 ниже ...

10
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
29.12.2023, 00:12
Staut, У подсветки должна быть какая то подсказка. Скрин в студию
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
29.12.2023, 08:22
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Дык задекларировал, что get_cont() возвращает type, а где ругается - пытаешься этот type сложить с int.
Вот и все
3
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
29.12.2023, 09:00
Цитата Сообщение от Staut Посмотреть сообщение
Может я делаю что-то НЕ ТАК?
а вы расскажите что вы делаете. В чем выгода вот этой мудреной логики, зачем использовали тут замыкание?
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
29.12.2023, 11:33  [ТС]
- iSmokeJC, спасибо! Работать с Типами в Python еще НЕ УМЕЮ. Правил ПРАВИЛЬНОГО обхода всех сложностей
пока не знаю. Ведь не могу же я сделать так:
Python
1
2
    def get_cont(self, ind: int = 0) -> self.el_type:  # получить - Значение (по Индексу)
        return self.clos.__closure__[0].cell_contents[ind]  # (параметры: - type (0), - size (1))
Python не пропустит -> self.el_type:
- А как тогда делать ПРАВИЛЬНО?

- Welemir1, в моем приложении приходится иметь дело с всего несколькими Глобальными переменными.
Они как бы над несколькими другими Модулями. Нужно быть уверенным в Значениях этих переменных и их ИЗМЕНЕНИИ.
Оформил эти Глобальные переменные в виде Контейнеров и обращаюсь к ним из НЕСКОЛЬКИХ своих Модулей.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
29.12.2023, 11:36
Я ровным счетом ничего не понял, посему откланиваюсь
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
29.12.2023, 11:59  [ТС]
- iSmokeJC. Я имел в виду то, что в Методе get_cont() в Аннотации Возвращаемого Значения
ПРАВИЛЬНЕЕ было бы написать: -> self.el_type: Но интерпретатор Python по каким-то своим причинам
этого НЕ ДОПУСКАЕТ!
- Спасибо Вам за участие.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
29.12.2023, 12:26
Лучший ответ Сообщение было отмечено Staut как решение

Решение

Цитата Сообщение от Staut Посмотреть сообщение
ПРАВИЛЬНЕЕ было бы написать: -> self.el_type
Ни разу не правильнее. Декларируется возвращаемый ТИП, а не какая-то переменная.

Добавлено через 5 минут
Я кажись понял глубинную идею этого кода.
Мсье знает толк в извращениях...

По сабжу - убери вообще эту декларацию возвращаемого типа, ведь тип не определен

Добавлено через 2 минуты
Цитата Сообщение от Welemir1 Посмотреть сообщение
а вы расскажите что вы делаете
ТС пытался замутить нечто подобное Optional из джавы. Но способ такой себе

Добавлено через 12 минут
Цитата Сообщение от Staut Посмотреть сообщение
def incr_cont(self):  # Увеличить текущее Значение
Если твой класс позиционируется как хранилище значения любого типа, то каким боком тут инкремент/декремент? Каким образом ты например будешь делать инкремент строке? Или кортежу? Или еще чему-нибудь кроме int и float?
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
29.12.2023, 12:43  [ТС]
- Да я вроде бы и сам допер! У меня сейчас в Коде:
Python
1
2
3
4
5
6
7
8
9
    def get_cont(self, ind: int = 0):  # получить - Значение (по Индексу)
        return self.clos.__closure__[0].cell_contents[ind]  # (параметры: - type (0), - size (1))
    ...
    def incr_cont(self):  # Увеличить текущее Значение
        if self.el_type == int | float:
            val = self.get_cont()
            self.set_cont(val + 1)  # (НЕ подсвечивает !!!)
        else:
            raise TypeError(f'Попытка инкрементировать Тип {self.el_type}!')
- Сейчас ничто не подсвечивается и работает правильно. Просто я думал, что есть какие-то
"более ПРАВИЛЬНОЕ" указание в Аннотации Выходного Значения или еще "что-то".
Просто ПЛОХО знаю работу с Аннотациями и Типами Данных. Учусь ...
- Спасибо за указания!
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
29.12.2023, 13:08
Цитата Сообщение от Staut Посмотреть сообщение
Нужно быть уверенным в Значениях этих переменных и их ИЗМЕНЕНИИ.
в питоне это невозможно, даже в замыкание (как и написано в коде) можно легко залезть и все поменять. Потому мы в питоне этим не занимаемся - не закрываем доступы, не вешаем амбарные замки, просто вешаем знак "Внимание" при помощи нижнего подчеркивания. Для взрослых пользователей твоего кода этого будет достаточно. Потому я бы все это переписал на обычный класс без всяких замыканий.
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
29.12.2023, 19:16  [ТС]
- Да Welemir1, Спасибо! Слышал я и о "невозможности защитить", и о "нижнем подчеркивании".
Только пока никак не приноровлюсь сам. Видимо пока эти знания "шаткие". Нужно больше писать и пробовать.
Этим и занимаюсь ... Еще раз Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.12.2023, 19:16
Помогаю со студенческими работами здесь

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

Доказательство теоремы о транзитивном замыкании
Добрый день! Помогите пожалуйста понять доказательство: ...

Переделать контейнер-очередь в контейнер-стек
Переделать контейнер-очередь в контейнер-стек Есть 2а файла: TQUEUE.H: #ifndef TQUEUE_H #define TQUEUE_H #include...

АЦП выдаёт не 0 при замыкании на землю
Здравствуйте. Хотел подключить пару кнопок через ацп на attiny13 и заметил некоторые странности в работе. Для проверки взял arduino uno на...

Расчет сопротивления при коротком замыкании
Нужно рассчитать сопротивление на зажимах 1 и 1' в случае короткого замыкания. Понятно,что мы закорачиваем точки 2 и 2' , то есть соединяем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru