Для каких типов приложений Python является плохим выбором? [закрыто]

21

Я только начал изучать Python, и я хотел бы получить больше контекста по языку.

Я понимаю, что во многих случаях Python является медленным языком по сравнению с C или C ++. Таким образом, Python, вероятно, не лучший выбор для приложений, которые должны работать как можно быстрее.

Помимо этого, кажется, что Python - отличный язык общего назначения, который легко читать и писать. Доступные библиотеки дают ему огромное количество функциональности. Помимо приложений, критичных для производительности, где плохой выбор для использования Python (и почему)?

Кейси Паттон
источник
8
Нет такого понятия, как отличный язык общего назначения. Приблизительно каждые пять лет новый заменяет старый, который выживает только на нишевых рынках. Лисп, Фортран, Паскаль, Базовый, Ада, Перл ...
mouviciel
3
@mouviciel: Паскаль нишевый язык? Хорошо, его имя было изменено на Delphi, чтобы соответствовать IDE Borland / CodeGear / Embarcadero, но Delphi по-прежнему (на основе) Pascal, и хотя он потерял долю рынка, я бы точно не назвал это нишевым языком. И ни Basic по этому вопросу. Visual Basic по-прежнему Basic. Как Delphi, так и Visual Basic используются во многих компаниях ...
Марьян Венема
7
«Python - медленный язык относительно C или C ++». Вы должны подтвердить это конкретными тестами, которые вы использовали. В некоторых случаях (связанные с вводом / выводом программы, которые выполняют много системных вызовов), Python работает так же быстро, как C, потому что это просто оболочка для библиотеки C.
S.Lott
@ S.Lott Правда, и PyPy может иногда соперничать с JVM или даже C / C ++
yati sagade
Паскаль был предпочтительным языком обучения, когда я учился в университете. Потом несколько десятилетий пролетели мимо и теперь ей кажется Ява. Я профессионально кодирую несколько языков (полдюжины или около того), но все равно пишу Delphi для удовольствия.
Mawg говорит восстановить Монику

Ответы:

22

Программное обеспечение нацелено на встраиваемые цели с их ограниченными ресурсами. Большинство процессоров на этой планете либо не могут запускать Python из-за недостатка ресурсов, либо никто не перенес версию на эту архитектуру. Большинство процессоров, даже сейчас, имеют меньше мегабайта памяти.

uɐɪ
источник
… Пока кто-то не сделает Python-порт для Arduino. Ой, подожди!
Спойк
5
@ Указывайте, что эта ссылка предназначена для запуска Python на компьютере и только последовательной связи с Arduino. Arduino не работает с кодом Python
Басарат
1
@BasaratAli: Отказ от ответственности - я написал свой комментарий в шутку. ;-)
Спойк
14

Два места, которые приходят на ум, - это вещи, которые требуют большого количества параллелизма, для чего я бы использовал Erlang. Или сверхмощные числовые вычисления, которые я, вероятно, попытался бы использовать на Фортране.

Захари К
источник
1
Фортран все еще опережает C / C ++ в численных вычислениях? ...
Сардатрион - Восстановить Монику
1
Вы знаете, я не знаю. Это не та область, у меня есть большой опыт. Но я знаю, что люди из Фортрана потратили более 30 лет, чтобы их инструменты работали очень быстро.
Захари К
@ Сардатрион - Сложно сказать. Только естественно, вы понимаете. Но несколько месяцев назад г-н Лайонел из Intel Fortran Fame заявил, что их линейка Fortran превосходит все остальные продукты в своей линии разработки (которая не так уж и узка).
Ладья
@Idigas: Действительно, я знаю, что Fortran широко используется, но это может быть связано с устаревшим кодом, а не с ограничениями оптимизации. Возможно я должен задать это как вопрос ...
Сардатрион - Восстановить Монику
Также помните, что многие из тех, кто выполняет численные вычисления, действительно хорошо знают Фортран, и это их инструмент выбора. Поэтому, когда им нужно выполнить такую ​​задачу, они достигнут Фортрана.
Захари К
8

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

Поэтому, если у вас есть большой проект, который нужно поддерживать и модифицировать в течение длительного времени, и ваша команда не стремится создавать автоматизированные тесты для всего, тогда вам лучше использовать Java или C #.

Эрик Уилсон
источник
17
Рефакторинг любого крупного проекта без юнит-тестов очень сложен.
Сардатрион - Восстановить Монику
9
Правда, но гораздо сложнее без безопасности типов.
Эрик Уилсон
3
@ Эрик Уилсон - Даже тогда, строгая типизация может дать вам ложное чувство безопасности ... Он компилируется, отправьте его!
Марк Бут
2
Это может быть не на 100% по теме вопроса, но все же является действительным аргументом. Поддержка инструментов, особенно рефакторинг для динамически типизированных языков, отсутствует по сравнению с такими языками, как Java или C #. Простое переименование может быть исчерпывающим упражнением в больших проектах Python.
OliverS
Требуется ли Python отдельная среда выполнения или виртуальная машина, или он может генерировать отдельный автономный исполняемый файл?
Джим в Техасе
2

Если основное внимание уделяется разработке графического интерфейса для Windows, то я бы рекомендовал не использовать CPython, поскольку не хватает хороших дизайнеров форм (по сравнению с использованием .Net).

Однако IronPython работает на .Net, и у вас есть две IDE с дизайнерами форм на выбор: Visual Studio и SharpDevelop. На самом деле Python Tools для Visual Studio можно использовать как для CPython, так и для IronPython, что довольно неплохо, хотя я еще не пробовал ...

AndyHasIt
источник
2

Это действительно зависит от того, что вы подразумеваете под «плохим выбором».

Если вы имеете в виду приложения, в которых использование Python является очень сложным, то их относительно немного: основное, что приходит на ум и еще не упоминалось, - это код, требующий высокого уровня корректности, когда языки с системами сложных типов (Haskell, языки с зависимой типизацией) ) лучшие варианты.

Если вы имеете в виду приложения, в которых Python является неоптимальным (то есть есть лучший выбор), то их больше, но они также более субъективны. Например, по моему общеизвестному ограниченному опыту, работа с компиляторами и интерпретаторами намного проще с алгебраическими типами данных, сопоставлением с образцом и более функциональными функциями, чем у Python. Однако исчерпывающий список таких приложений невозможен, так как они варьируются в зависимости от человека.

Тихон Джелвис
источник
2

Он идеально подходит для быстрого написания сценариев из-за его выразительных возможностей и широкого спектра вспомогательных библиотек.

Динамическая проверка типов и отсутствие явного объявления переменных делают его плохим выбором для больших проектов, в которых используются сотни тысяч или даже миллионы строк кода. То же самое относится к критически важным системам или системам безопасности. Например, в системе авионики было бы совершенно неприемлемо отказывать систему из-за ошибки, которая могла быть обнаружена во время компиляции.

Майк Коллинз
источник
0

Ну, как и вы, я также только начинаю с Python. Но для меня в контексте машинного обучения и науки о данных.

Я также только что приобрел все новые знания в Java 8 и его новых ориентированных на потоки библиотеках.

Мне очень понравилось плавное ощущение новых потоковых библиотек Java 8 и то, насколько он близок мне благодаря библиотекам Apache. Когда я вошел в Python, я ожидал того же и большего.

Я видел больше. Но намного меньше. Плохая документация, хотя ее было много; нет текучести, и на самом деле мне оставалось гадать, правит ли метод новым объектом или оперирует этим; ничего близкого к карте / уменьшению и т. д. Я был удивлен, что остался разочарованным.

Однако с самого начала у меня не было больших надежд на то, как легко будет учить язык. Я был признан правым: непоследовательным, не интуитивным, трудным для изучения. Но это был только мой опыт быть довольно хорошим во всем, как Java.

Йо Йо
источник