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

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

19.11.2019, 07:48. Показов 15557. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru