Сейчас я разрабатываю в основном на C / C++, но я написал несколько небольших утилит на Python для автоматизации некоторых задач, и мне это очень нравится как язык (особенно продуктивность).
За исключением производительности (проблема, которую иногда можно решить благодаря простоте взаимодействия Python с модулями C), как вы думаете, подходит ли он для производственного использования при разработке автономных сложных приложений (подумайте, например, о текстовом редакторе или графический инструмент)?
Какую IDE вы бы посоветовали? На мой взгляд, IDLE, поставляемого с Python, недостаточно даже для небольших проектов.
Просматривая материалы в 2014 году, я заметил этот вопрос и хотел отметить, что Resolver One, таблица, упомянутая в качестве примера в нескольких комментариях, больше не разрабатывается активно.






На мой взгляд, Python более чем готов для разработки сложных приложений. Я вижу силу питонов больше на стороне сервера, чем на написании графических клиентов. Но взгляните на http://www.resolversystems.com/. Они разрабатывают целую электронную таблицу на Python, используя порт .net ironpython.
Если вы знакомы с eclipse, обратите внимание на pydev, который обеспечивает поддержку автозаполнения и отладки для python со всеми другими полезностями eclipse, такими как поддержка svn. Разработчик его только что был куплен аптана, так что это будет надежный выбор на будущее.
@Marcin
Cons: as a dynamic language, has way worse IDE support (proper syntax completion requires static typing, whether explicit in Java or inferred in SML),
Вы правы, что статический анализ не может обеспечить полное завершение синтаксиса для динамических языков, но я думаю, что pydev выполняет свою работу очень хорошо. Более того, при программировании на Python у меня другой стиль разработки. У меня всегда открыт сеанс ipython, и с одним F5 я не только получаю идеальное завершение от ipython, но и самоанализ и манипулирование объектами.
But if you want to write second Google or Yahoo, you will be much better with C# or Java.
Google просто переписал jaiku для работы поверх App Engine, все на Python. И, насколько я знаю, внутри Google тоже много питона.
В настоящее время Google реконструирует некоторые из своих продуктов (Youtube и т. д.) С использованием C++ из-за проблем с производительностью, реализованных в Python.
Мне очень нравится питон, обычно это мой язык в наши дни для небольших (не связанных с графическим интерфейсом) вещей, которые я делаю самостоятельно.
Однако для некоторых более крупных проектов Python, которыми я занимался, я обнаружил, что это не совсем то же самое, что программирование, скажем, на C++. Я работал над синтаксическим анализатором языка, и мне нужно было представить AST на Python. Это, безусловно, входит в рамки возможностей Python, но у меня возникли некоторые проблемы с рефакторингом. Я менял представление своего AST и много менял методы и классы, и я обнаружил, что пропустил строгую типизацию, которая была бы доступна мне в решении C++. Утиная типизация Python была почти гибкой тоже, и я обнаружил, что добавляю много кода assert, чтобы попытаться проверить мои типы во время работы программы. И тогда я не мог быть уверен, что все было правильно набрано, если у меня не было 100% тестирования покрытия кода (чего я не делал в то время).
На самом деле, это еще одна вещь, по которой я иногда скучаю. На Python можно написать синтаксически правильный код, который просто не будет работать. Компилятор не может сообщить вам об этом до тех пор, пока он не выполнит код, поэтому в редко используемых путях кода, таких как обработчики ошибок, вы можете легко скрывать невидимые ошибки. Даже такой простой код, как печать сообщения об ошибке со строкой формата%, может завершиться ошибкой во время выполнения из-за несоответствия типов.
Я не использовал Python для каких-либо вещей с графическим интерфейсом, поэтому я не могу комментировать этот аспект.
В общем, если вы проверяете типы в Python, значит, вы делаете это неправильно. Канонический стиль в Python заключается не в том, чтобы спрашивать, к какому типу относится объект, а в том, какие методы он поддерживает. Например, вместо того, чтобы спрашивать «Вы собака?», Вы спрашиваете «Умеешь ли ты лаять?».
@RyanGinstrom Насколько я понимаю, он использовал проверку типов для утверждений, а не логику. Это похоже на добавление некоторого запаха статической печати для повышения устойчивости к ошибкам.
Python считается (среди программистов Python :) отличным языком для быстрого прототипирования. Не так уж много постороннего синтаксиса мешает вашим мыслительным процессам, поэтому большая часть работы, которую вы делаете, как правило, уходит в код. (Для написания хорошего кода Python требуется гораздо меньше идиом, чем для написания хорошего C++.)
Учитывая это, большинство программистов Python (CPython) приписывают философию «преждевременная оптимизация - корень всех зол». Написав высокоуровневый (и значительно более медленный) код Python, можно оптимизировать узкие места с помощью привязок C / C++, когда ваше приложение приближается к завершению. На этом этапе становится более ясно, каковы ваши алгоритмы, интенсивно использующие процессор, благодаря правильному профилированию. Таким образом, вы пишете большую часть кода в очень удобочитаемой и поддерживаемой манере, позволяя при этом ускоряться в будущем. Именно по этой причине вы увидите несколько библиотечных модулей Python, написанных на C.
Большинство графических библиотек в Python (например, wxPython) в любом случае являются просто оболочками Python для библиотек C++, поэтому вы в значительной степени пишете на бэкэнд C++.
Чтобы ответить на ваш вопрос IDE, SPE (Stani's Python Editor) - хорошая IDE, которую я использовал, и Затмение с PyDev также выполняет свою работу. Оба являются OSS, так что вы можете попробовать их бесплатно!
[Edit] @Marcin: Был ли у вас опыт написания> 30k LOC на Python? Также забавно, что вы упомянули проблемы масштабируемости Google, поскольку они самые большие сторонники Python! Также небольшая организация под названием НАСА также часто использует Python;) см. «Один кодировщик и 17 000 строк кода позже».
Это хорошо для одного кодировщика ... как насчет проектов с большим количеством переходных кодеров и кодом более 17К? Кто-нибудь знает, остается ли там легко обслуживаться?
Вы найдете в основном два ответа на этот вопрос - религиозный (да! Конечно! Это лучший язык на свете!) И другой религиозный (вы, должно быть, шутите! Python? Нет ... он недостаточно зрелый). Возможно, я пропущу последнюю религию (Python ?! Используйте Ruby!). Правда, как всегда, далеко не очевидна.
Плюсы: это легко, читается, батарейки в комплекте, есть много хороших библиотек почти для всего. Это выразительный и динамичный набор текста во многих случаях делает его более лаконичным.
Минусы: как динамический язык, имеет гораздо худшую поддержку IDE (правильное завершение синтаксиса, статическая типизация требует, явная в Java или предполагаемая в SML), его объектная система далека от совершенства (интерфейсы, кто-нибудь?), И легко закончить с беспорядочным кодом, в котором есть методы, возвращающие либо int, либо boolean, либо object, либо что-то еще при неизвестных обстоятельствах.
Мое мнение - мне нравится Python за создание сценариев, автоматизацию, крошечные веб-приложения и другие простые четко определенные задачи. На мой взгляд, это, безусловно, динамический язык самый лучший на планете. Тем не менее, я бы использовал никогда динамически типизированный язык любой для разработки приложения значительного размера.
Скажем, было бы хорошо использовать его для Stack Overflow, у которого есть три разработчика, и я думаю, не более 30 тысяч строк кода. Для больших вещей - сначала ваша разработка будет очень быстрой, а затем, как только команда и кодовая база вырастут, все замедлится больше, чем с Java или C#. Вам нужно компенсировать отсутствие проверок времени компиляции, написав больше юнит-тестов, рефакторинг становится сложнее, потому что вы никогда не узнаете, что сломал ваш рефакторинг, пока не запустите все тесты или даже все большое приложение и т. д.
Теперь - решите, насколько большой будет ваша команда и насколько большим должно быть приложение, когда оно будет готово. Если у вас 5 или менее человек и целевой размер примерно равен переполнению стека, продолжайте писать на Python. Вы закончите в кратчайшие сроки и будете довольны хорошей кодовой базой. Но если вы хотите написать второй Google или Yahoo, вам будет намного лучше с C# или Java.
Замечание по C / C++, о котором вы упомянули: если вы не пишете критически важное для производительности программное обеспечение (скажем, массивный параллельный трассировщик лучей, который будет работать в течение трех месяцев при рендеринге фильма) или очень критически важную систему (скажем, посадочный модуль на Марсе, который будет летать три года подряд) и имеет только один шанс правильно приземлиться, иначе вы потеряете 400 млн долларов) не используйте его. Для веб-приложений, большинства настольных приложений, большинства приложений в целом это не лучший выбор. Вы умрете отладочные указатели и выделение памяти в сложной бизнес-логике.
Проверка времени компиляции не заменяет тестирование ... Я не совсем понимаю жалобу на python, что он "требует большого количества модульного тестирования", поскольку весь код должен ... То, что что-то компилируется, не означает, что он будет работать!
Отсутствие интерфейсов? Его динамичный язык. Кроме того, нужно быть достаточно умным, чтобы в любом случае избегать ООП.
«Кроме того, нужно быть достаточно умным, чтобы в любом случае избегать ООП». В этом нет никакого смысла. ООП-программирование определенно имеет свое место, но вам необходимо согласовать свою архитектуру с задачей, которую вы пытаетесь выполнить.
Все программное обеспечение нуждается в модульных тестах, но программное обеспечение на Python требует даже больше, чем на других языках.
Чтобы получить завершение синтаксиса в Python при использовании Pycharm или PyDev, установите точку останова внутри функции / метода, которые вы хотите реализовать, запускать там (через модульный тест или что-то еще) и код внутри консоли.
Что касается «плохой IDE», ответ подразумевает - это может быть правдой для 2008 года. Теперь, в 2020 году, pycharm ЧРЕЗВЫЧАЙНО хорош во всем, что вы хотите, и имеет отличную бесплатную версию.
Я знаю, что, вероятно, констатирую очевидное, но не забывайте, что качество команды разработчиков и их знакомство с технологией будут иметь большое влияние на вашу способность выполнять поставленные задачи.
Если у вас сильная команда, то, вероятно, не проблема, если они знакомы. Но если у вас есть люди в возрасте от 9 до 5 лет, которые не знакомы с технологией, им потребуется дополнительная поддержка, и вам нужно будет вызвать, если повышение производительности будет стоить любой стоимости этой поддержки.
Рефакторинг неизбежен для больших кодовых баз, а отсутствие статической типизации делает это намного сложнее в Python, чем в языках со статической типизацией.
Один из способов понять, для чего используется Python, - это посмотреть, какие продукты используют Python в настоящий момент. Этот страница википедии содержит длинный список, включающий различные веб-фреймворки, системы управления контентом, системы контроля версий, настольные приложения и IDE.
Как говорится в здесь: «Некоторые из крупнейших проектов, использующих Python, - это сервер приложений Zope, YouTube и оригинальный клиент BitTorrent. Крупные организации, использующие Python, включают Google, Yahoo !, CERN и NASA. ITA использует Python для некоторых его компонентов ".
Короче говоря, да, он «подходит для производственного использования при разработке автономных сложных приложений». Как и многие другие языки, с различными плюсами и минусами. Какой язык лучше всего подходит для вашего конкретного случая использования, слишком субъективно, чтобы отвечать, поэтому я не буду пытаться, но часто ответ будет «тот, который ваши разработчики знают лучше всего».
Мы использовали IronPython для создания нашего флагманского приложения для работы с электронными таблицами (производственный код 40kloc - и это Python, что IMO означает, что loc per feature мало) в Резольверные системы, поэтому я бы определенно сказал, что он готов для производственного использования сложных приложений.
Есть два способа, по которым это может оказаться для вас бесполезным :-)
Re: IDE - мы вполне довольны тем, что каждый человек пользуется своим любимым текстовым редактором; если вы предпочитаете что-то более тяжелое, тогда WingIDE будет очень хорошо оценен.
Очевидная проблема с IronPython, конечно, заключается в том, что если вы не в Windows, вы теряете .NET :) Но Resolver - это круто, и он выглядит как настоящее приложение :)
Что касается CPython, выглядящего профессионально - я полагаю, вы имеете в виду родные в этом контексте - вы можете попробовать wxPython.
Или PySide той же компании QT.
@GreggLind IronPython отлично работает под MONO ... не уверен, было ли это правдой в '09 ... Просто обновляю для потомков :)
Неплохо подмечено. Несколько компонентов Windows ".NET" по-прежнему не работают, хотя на самом деле они не .NET, а представляют собой .NET-оболочки для собственного кода Windows.
Re: «профессиональный» - думаю (и это было давно) я имел в виду некую комбинацию родного и эстетичного. На момент написания оригинального поста я не видел ни одного приложения с графическим интерфейсом пользователя Python, которое было бы тем и другим - на самом деле, большинство из них выглядело функционально, но грубо. Возможно, это изменилось, но последние пару лет я использую CPython на серверной части веб-приложений почти исключительно, поэтому не могу точно сказать.
Нечего добавить к другим ответам, Помимо, что если вы выбираете python, вы должен используете что-то вроде пиллинт, о котором до сих пор никто не упоминал.
Да, но все, кого я знаю, кто начинает использовать pylint в существующем коде, делают это только с отключенными многочисленными проверками.
У меня был только один опыт работы с питоном, мой проект trash-cli.
Я знаю, что, вероятно, некоторые или все проблемы зависят от моего неопытности с python.
Меня разочаровали следующие вещи:
Более того:
Хотя некоторые программисты на Python говорят мне, что у них нет этих проблем, или говорят, что это не проблемы.
Если вы все еще занимаетесь программированием на Python, я рекомендую Eclipse с PyDev. Intype (intype.info/home/index.php) хорош, если вы предпочитаете что-то более легкое. Также PEP 8 является общепринятым руководством по стилю, но, конечно, это зависит от индивидуального программиста. python.org/dev/peps/pep-0008
Какой аспект соглашения о коде отсутствует? Я считаю, что чужой код Python обычно очень удобочитаем, потому что часто «правильный путь» и «быстрый путь» - это самый простой синтаксически способ, поэтому люди используют похожие идиомы.
@Gregg Lind: некоторые стандартные библиотеки используют this_naming_convention, а некоторые другие используют thisNamingConvention для имен методов. Даже в стандартных библиотеках нет принятого стандарта.
And as far as I know they use a lot of python inside google too.
Что ж, я надеюсь, что создатель питона все еще работает в Google, если я не ошибаюсь?
Что касается использования Python, я считаю, что это отличный язык для автономных приложений. Он активно используется во многих программах Linux, и есть несколько хороших виджетов, которые помогают в разработке графического интерфейса.
Использование Python доставляет удовольствие. Я использую его постоянно, а также пишу много кода для работы на C#. У написания кода пользовательского интерфейса на Python есть два недостатка. Во-первых, не существует единой структуры пользовательского интерфейса, которая была бы принята большинством сообщества. когда вы пишете на C#, среда выполнения .NET и библиотеки классов предназначены для совместной работы. В Python каждая библиотека пользовательского интерфейса имеет собственную семантику, которая часто расходится с питоническим мышлением, в котором вы пытаетесь написать свою программу. Я не виню писателей библиотеки. Я пробовал несколько библиотек (wxwidgets, PythonWin [Wrapper around MFC], Tkinter). При этом я часто чувствовал, что пишу код на языке, отличном от Python (несмотря на то, что это был python), потому что библиотеки не ' в точности pythonic они являются портом с другого языка, будь то c, C++, tk.
Поэтому я буду писать код пользовательского интерфейса в .NET (для меня C#) из-за IDE и согласованности библиотек. Но когда смогу, я напишу бизнес-логику на python, потому что она понятнее и веселее.
Попробуйте Django или Pylons, напишите простое приложение с обоими из них, а затем решите, какое из них вам больше подходит. Есть и другие (например, Turbogears или Werkzeug), но они используются чаще всего.
Все это веб-фреймворки; как насчет приложений, не основанных на Интернете?
Этот вопрос слишком запутанный и неоднозначный. Казалось бы, вы хотите знать, в частности, об использовании CPython, а не IronPython и т. д., Но это так и не было разъяснено. Вы спрашиваете только о языке или о выборе языка + переводчик? Вопрос об IDE - это совсем другая тема. Если бы я задавал вопрос, я бы сформулировал его так: «Насколько хорош выбор CPython для разработки сложных приложений?»