Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.99/76: Рейтинг темы: голосов - 76, средняя оценка - 4.99
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755

Точность выполнения кода в задачах жизни и смерти. Утиная типизация (Duck tuping)

19.11.2019, 07:48. Показов 15596. Ответов 125

Студворк — интернет-сервис помощи студентам
Это принцип в Python по аналогии, что когда что-то крякает, как утка и ходит, как утка, то это является уткой. Если буду писать программы, связанные с медицинской диагностикой с разветвлениями алгоритма в тысячи вариантов, то как избежать ошибок, чтобы программа не приняла одни данные за другие?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2019, 07:48
Ответы с готовыми решениями:

Утиная типизация
Нужно ли проверять типы данных аргументов передаваемых в метод класса или функции, как лучше делать: проверять с помощью isinstance или...

Утиная типизация
Подскажите пожалуйста, две ситуации Первая, у меня есть метод который работает int float , но если будет передаваться, что-то другое...

дело жизни и смерти
У меня скоро конец семестра,а училка задала мне задачи,а я в паскале ничего не понимаю( Помогите,а то меня не аттестуют. и...

125
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.12.2019, 11:06
Студворк — интернет-сервис помощи студентам

Не по теме:

лол:

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
import inspect 
 
DEBUG = True
 
def check_types(func):
    if not DEBUG:
        return func
 
    ins = inspect.getfullargspec(func)
 
    def wrap(*args, **kwargs):
        for name, value in zip(ins.args, args):
            assert isinstance(value, ins.annotations[name])
        for name, val in kwargs.items():
            assert isinstance(value, ins.annotations[name])
        res = func(*args, **kwargs)
        assert isinstance(res, ins.annotations['return']), 'error return type function "%s"' % func.__name__
        return res
    return wrap
 
 
@check_types
def f(name1: int, name2: int) -> list:
    return [name1, name2]
 
print(f(1, name2=2))



Первая ссылка - это просто расстановка аннотаций. В рантайме это ничего не даёт.

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

Видео посмотреть не могу.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
03.12.2019, 11:16  [ТС]
Что значит
В рантайме это ничего не даёт
Собственно такой вопрос задаю, потому что плохо понимаю, что такое рантайм.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.12.2019, 11:23
Это когда программа выполняется (run time).

То есть, допустим, во время выполнения программы бросаются исключения (деление на ноль, выход за границы списка и прочее). Вот если бы аннотации проверяли на самом деле тип переменных и бросали бы исключения, если это не так - была бы польза от них. Но этого нет, потому что любая проверка в рантайме замедляет выполнение основного кода.

Статическая проверка типов данных (в том числе статические анализаторы) смотрит на код, не важно будет ли он запущен и не важно выполнится ли когда-нибудь одна из веток кода - она всё проверит.

В питоне же нельзя сказать точно, правильно написан ли код (может там обращение к несуществующей переменной?), если не выполнить его хоть раз.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
03.12.2019, 11:43  [ТС]
Так решают ли нововведения проблемы динамической типизации с точки зрения обсуждаемой темы?
0
Эксперт Python
 Аватар для dondublon
4661 / 2080 / 367
Регистрация: 17.03.2012
Сообщений: 10,202
Записей в блоге: 6
03.12.2019, 12:43
supmener, а какие проблемы с динамической типизацией?
Если куда-то передали что-то не то - оно просто упадёт. И всё ок - ошибка выявлена, можно править.
Чтобы пореже передавать что-то не то - существует type hinting (в широком смысле). Но это просто подсказки.

Понимаете, питон изначально сделан с duck typing. Если вам по каким-то причинам это не нравится или не подходит - не используйте его. Не надо пытаться его переделать. Есть куча языков со строгой статичной типизацией, в том числе мейнстримовые.

Но я бы просто посоветовал вам расслабиться и получить удовольствие. В duck typing есть свои плюсы, просто их замечаешь не сразу.

Добавлено через 2 минуты
supmener, кстати, я не в курсе, как в Аде обстоит дело со сборщиком мусора?
2
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.12.2019, 12:48
Цитата Сообщение от dondublon Посмотреть сообщение
Если куда-то передали что-то не то - оно просто упадёт.
Буквально на днях правил код:
Python
1
if var == 10:
условие не срабатывало. Ну да, потому что var - это строка.
Python
1
if var == '10':
Будь у меня IDE, то даже без аннотаций типов скорей всего редактор подсветил бы ошибку. Не стоит рассчитывать, что оно упадёт. Конечно, я пишу код с идеей "Пусть оно громче упадёт, чем промолчит об ошибке", но иногда факапы случаются. Правда, они быстро правятся, так код выше был сразу исправлен после первого запуска.
1
Эксперт Python
 Аватар для dondublon
4661 / 2080 / 367
Регистрация: 17.03.2012
Сообщений: 10,202
Записей в блоге: 6
03.12.2019, 12:49
supmener, и ещё один совет.
Если вам важна надёжность программ как реализованных алгоритмов - вам нужно тестирование. В смысле, его вам нужно изучить, как делается. В процессе изучения, кстати, появится и кое-какое понимание, как функции писать.

Добавлено через 37 секунд
Рыжий Лис, ну, всяко бывает. Это Питон
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.12.2019, 12:50
Я уже раз пять говорил про необходимость тестов. Даже pytest предлагал, вместо встроенных unit-тестов.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
03.12.2019, 12:51  [ТС]
supmener, кстати, я не в курсе, как в Аде обстоит дело со сборщиком мусора?
Первым языком программирования, избавившим программиста от необходимости управлением памятью, был LISP, благодаря использованию механизма сборки мусора. Этот механизм используется и в других языках, в том числе в Java и Python. Наличие сборщика мусора значительно упрощает программирование, но имеет свои проблемы. Например, сборщик мусора может приостанавливать исполнение программы непредсказуемым образом, что может привести к проблемам в системах реального времени. Программируя системы реального времени, необходимо тщательно контролировать распределение памяти, а также гарантировать время отклика программы, что может быть затруднительно при использовании сборщика мусора. Одной из причин, по которой в первый стандарт языка Ада 83 не включали средства ООП, было то, что автор языка, Жан Ишбиа, занимавшийся в свое время реализацией ООП языка Simula, был уверен в том, что ООП необходимо иметь сборщик мусора, а это неприемлемо для систем реального времени. Как впоследствии было продемонстрировано в C++ и Ада 95, язык может поддерживать ООП без сборщика мусора, если он предоставляет программисту развитые механизмы управления памятью.

Ада позволяет программисту выбрать один из следующих механизмов управления памятью:

ручной режим. В этом случае программист освобождает память каждого объекта индивидуально.
пул памяти. Объекты можно удалять, как каждый отдельно, так и весь пул целиком.
сборщик мусора. Этот режим может быть реализован не во всех системах.
Источник ada-ru.org
0
Эксперт Python
 Аватар для dondublon
4661 / 2080 / 367
Регистрация: 17.03.2012
Сообщений: 10,202
Записей в блоге: 6
03.12.2019, 13:00
supmener, копипаста говорит о том, что вы не интересовались этим вопросом.
А как вы думаете, с точки зрения надёжности - сборщик мусора помогает или мешает?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
03.12.2019, 13:06
Чувствую, тема скоро переместится в холивары. Там есть много ярых поклонников\ненавистников GC.
0
Эксперт Python
 Аватар для dondublon
4661 / 2080 / 367
Регистрация: 17.03.2012
Сообщений: 10,202
Записей в блоге: 6
03.12.2019, 13:15
iSmokeJC, не перейдёт. Тут же питонисты. Все ненавистники сидят в других разделах.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
03.12.2019, 13:19  [ТС]
Что такое GC?

Цитата Сообщение от dondublon Посмотреть сообщение
А как вы думаете, с точки зрения надёжности - сборщик мусора помогает или мешает?
Никак не думаю. Просмотрел несколько курсов на видео для новичков, там про сборщик мусора не говорилось. Сейчас изучаю небольшую книжку для новичков, там нюансы есть, которых в видео не было и задачки для тренировки.
Это Питон изучаю, а не АДА.
0
Эксперт Python
 Аватар для dondublon
4661 / 2080 / 367
Регистрация: 17.03.2012
Сообщений: 10,202
Записей в блоге: 6
03.12.2019, 13:24
supmener, это я к тому, что, думая о надёжности, не стоит упираться в утиную типизацию. Это далеко не самый важный фактор.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.12.2019, 13:27
Сборщик мусора (Gargabe Collector, GC)
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
03.12.2019, 13:31  [ТС]
О вопросах надежности в Python заинтересовался, когда узнал об утиной типизации. Посты в этой теме тоже очень помогли.

Добавлено через 1 минуту
Цитата Сообщение от dondublon Посмотреть сообщение
не стоит упираться в утиную типизацию. Это далеко не самый важный фактор
Для меня многие факторы важные.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
14.12.2019, 19:30  [ТС]
если объявить две переменные: часы и минуты, и сложить их, Ада не даст. В Аде можно объявлять новые целочисленные типы данных с ограничениями вроде диапазонов возможных значений.
0
16.12.2019, 02:35

Не по теме:

Цитата Сообщение от supmener Посмотреть сообщение
если объявить две переменные: часы и минуты, и сложить их, Ада не даст.
Надо это сделать, чтобы она не видела. Тогда даст)

0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
16.12.2019, 18:40  [ТС]
А в Pypi нету модуля защиты от дурака? Чтобы сделать из Питона Аду?
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.12.2019, 20:01
Цитата Сообщение от supmener Посмотреть сообщение
В Аде можно объявлять новые целочисленные типы данных с ограничениями вроде диапазонов возможных значений.
Это можно делать во многих ЯП, только на основе классов\трейтов\типов и т.д.
Достаточно создать свои классы с нужными ограничениями. Ничто не мешает программисту сделать также в Python.
Разве что его лень...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.12.2019, 20:01

вопрос жизни и смерти!!
Помогите с заданиями, мне очень срочно нужно!!! я боюсь меня выгонят из универа((((( ПОЖАЛУЙСТА ПРОШУ ВАС ПОМОГИТЕ!!(((( я написал...

Вопрос жизни и смерти
Дали задание в универе. В Delphi разбираюсь не очень. Прошу помощи как можно скорее. Задать любым изместным пользователю способом...

Вопрос жизни и смерти..
Парни помогите кто хорошо знает С++ просто если я к понидельнику не сдам ету програму мне прийдет писец... Вот собственно задание: ...

Файлы.(Вопрос жизни и смерти)
Создать файл, где каждой компонентой будет массив из N чисел. Определить минимальное значение в каждой компоненте, записав их в другой...

СРОЧНО!!! вопрос жизни и смерти !
ПОМОГИТЕ ПОЖАЛУЙСТА РЕШИТЬ ЗАДАЧУ. Задача Считать из текстового файла информацию в массив строк.Отобразить на экран.Удалить...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru