Для каких типов приложений 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 из-за недостатка ресурсов, либо никто не перенес версию на эту архитектуру. Большинство процессоров, даже сейчас, имеют меньше мегабайта памяти.


… Пока кто-то не сделает 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, что довольно неплохо, хотя я еще не пробовал ...


2

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

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

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


2

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

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


0

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.