Какие классы приложений или задач вы предпочитаете Python строго OO Languages? - PullRequest
4 голосов
/ 21 июня 2009

У меня довольно сильный опыт работы с языками в стиле Си. И работал над несколькими различными типами проектов. Я только начал серьезно смотреть на Python после прочтения Программирование Коллективного Разума . Я понимаю, что Python может решить любую проблему, что может C #, и наоборот. Но мне любопытно узнать от тех, кто регулярно использует оба, когда они выбирают одно над другим. Устранение других факторов, таких как опыт коллег и т. Д.

Когда вы решите создать приложение на Python вместо статически типизированного, чисто ОО-языка, такого как C # или Java?

Edit:

Я боялся, что мы немного отошли от темы с этим вопросом. Python - это объектно-ориентированный язык. Но, как указано ниже, он может не быть предпочтительным языком, когда ваше приложение будет иметь очень сложную бизнес-область и т. Д. Я знаю, что Python широко использует объекты, и что даже функции являются объектами, что не совсем верно во всех «ОО» языки, которые я поднял ранее.

Несмотря на мой плохой выбор слов в вопросе (почти ни один из языков не вписывается в описания двух или трех слов, и действительно трудно указать на различия в языках, если не кажется, что вы говорите с определенным классом разработчиков Я все еще очень заинтересован в том, что вы должны сказать, когда предпочитаете Python другим языкам.

Ответы [ 8 ]

10 голосов
/ 21 июня 2009

Мой девиз (и уже давно): «Python, где я могу, C ++, где я должен» (однажды я найду возможность реально использовать Java, C #, & C & C, в реальном проекте, но я еще нет, за исключением пилотного проекта в Java 1.1, более десяти лет назад ... ;-) - Javascript (с dojo), когда код должен выполняться в браузере клиента, и SQL, когда он должен запускаться в сервер БД, конечно, но C ++ и Python - мой ежедневный хлеб на «обычных» серверах и клиентах, которые я разрабатываю, и это относится ко всем частям Google, в которых я работал более 4 лет (есть много частей используя Java, я просто никогда не работал там ;-). Хммм, есть чистый C, когда я работаю над ядром Python и соответствующими расширениями, конечно же; -).

Ни Python, ни C ++ не являются "строго ОО" - они мультипарадигмы, и в этом заключается значительная часть их силы в руках программистов, обладающих высокой квалификацией в ОО и других парадигмах такие как функциональные, общие, декларативные и т. д. Я полагаю, что C # тоже использовал некоторые из них (иногда превосходя C ++, например, предлагая лямбды), и даже Java пришлось уступить некоторым (по крайней мере, универсальным) в некоторой степени, так что, несомненно, ясно, что «один размер подходит всем " не - многопарадигмальное программирование живо и хорошо! -)

C ++ (например, C) заставляет меня тщательно контролировать всю память (наше внутреннее руководство по стилю c ++ запрещает использование «умных указателей», которые равносильны плохим реализациям сборки мусора! -), что сильно увеличивает мою работу, но помогает убедитесь, что я не использую один бит памяти больше, чем строго необходимо в любое время: так, C ++ (или C, когда необходимо) - это выбор, когда память ограничена и драгоценна. В противном случае чрезвычайно высокая производительность Python (и Ruby или Javascript не сильно отличается, если вы к этому привыкли) делает его предпочтительным.

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

4 голосов
/ 21 июня 2009

Я выбираю Python как можно чаще. Это самая полезная и продуктивная среда программирования, которую я знаю.

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

  • Вставить интерпретатор Python
  • Использовать Jython
  • Использовать IronPython
  • Используйте некоторый механизм IPC (обычно http или сокеты) для вызова внешнего процесса python
  • Экспорт данных - обработка с использованием python - импорт данных
  • Создание кода с использованием Python

С мой ответ на предыдущий вопрос: Я знаю C #. Буду ли я более продуктивно работать с Python?


По моему опыту, что делает меня более продуктивным в Python против C #, это:

  • Это динамический язык. Использование динамического языка часто позволяет удалить целые архитектурные слои из вашего приложения. Динамическая природа Pythons позволяет создавать многократно используемые абстракции высокого уровня более естественным и гибким (по синтаксису) способом, чем в C #.
  • Библиотека. Стандартные библиотеки и множество библиотек с открытым исходным кодом, предоставляемых сообществом, отличаются высоким качеством. Диапазон приложений, для которых используется Python, означает, что диапазон библиотек широк.
  • Ускоренный цикл разработки. Отсутствие шага компиляции означает, что я могу тестировать изменения быстрее. Например, при разработке веб-приложения сервер dev обнаруживает изменения и перезагружает приложение при сохранении файлов. Запуск модульного теста из моего редактора - всего лишь нажатие клавиши, и он выполняется мгновенно.
  • «Простой доступ» к часто используемым функциям: списки, списки, генераторы, кортежи и т. Д.
  • Меньше многословного синтаксиса. Вы можете создать веб-каркас Python на основе WSGI с меньшим количеством строк кода, чем ваш типичный файл .NET web.config: -)
  • Хорошая документация. Хорошие книги.

3 голосов
/ 21 июня 2009

Я почти исключительно использую Python для поддержки своей разработки программного обеспечения на других языках. Я должен подчеркнуть, что это не результат какого-то сбоя в Python, скорее, что программные домены, в которых я работаю, обычно имеют другие языки / платформы, которые являются более подходящими или просто единственным вариантом:

  • Веб-разработка. Мне бы очень хотелось проверить Python на Google App Engine, но в данный момент я занимаюсь всей своей личной веб-разработкой на PHP.
  • Разработка настольных приложений: я использую Ogre SDK для разработки заставок Windows и использую для этого C ++ / Win32.
  • Разработка серверных приложений. Профессиональное написание программного обеспечения на стороне сервера для Windows почти всегда происходит на C ++.

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

  • К удалить данные с существующих веб-сайтов.
  • Создание отчетов на основе данных XML.
  • Создание наборов запросов SQL для заполнения баз данных на основе других форматов данных.
  • Анализирует все проекты C ++ и извлекает отдельный набор сообщений об ошибках и соответствующие им коды ошибок.
  • Сравните наборов данных, чтобы найти данные, которые я случайно потерял.
  • Обработка изображений для генерации данных для других программ.

Python - это такой мощный и полезный язык, что, хотя я никогда не использовал его в качестве основного языка для разработки программного обеспечения, я бы хотел.

2 голосов
/ 21 июня 2009

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

1 голос
/ 21 июня 2009

Python гораздо более строго OO, чем Java и C #.

Но если ваш вопрос заключается в том, когда использовать Python, а когда Java или C #, я считаю Python полезным для небольших программ, которые основаны на существующих библиотеках и не требуют большого моделирования предметной области. Например, небольшие настольные утилиты, написанные с помощью привязок Python Gtk, или сценарии обслуживания веб-сайтов, написанные с помощью lxml и elementtree.

Когда нужно выполнить большую часть моделирования предметной области приложения, особенно если домен плохо понимается или быстро меняется, я считаю, что ограниченные инструменты Python делают изменение кода очень трудоемким по сравнению с Java (не так актуально для C #, поскольку инструмент .NET поддержка тропы Java на несколько лет). Так что для таких проектов я буду использовать Java и IntelliJ.

0 голосов
/ 30 августа 2009

Все из них.

За исключением кода, который уже написан на другом языке, очевидно.

Даже если что-то кажется слишком большим для обработки Python, я все равно обычно делаю прототип Python, в основном потому, что все идет так гладко. Часто я все равно придерживаюсь Python и просто использую C API или ctypes для устранения узких мест (после того, как я переписал прототип в хорошем чистом виде)

0 голосов
/ 21 июня 2009

Обычно язык диктуется работой, кто хочет, чтобы все было сделано, и с кем вы работаете. Я использую только Java и C / C ++ для своих нужд программирования, главным образом потому, что люди, с которыми я работаю, используют его. При этом я использовал python для быстрого создания прототипов и тому подобного.

0 голосов
/ 21 июня 2009

И C, и Python - мои любимые языки, но я почти всегда начинаю что-то делать на Python для корректности, а затем погружаюсь в C, когда это необходимо. Я в основном использую программирование для исследования / числового кода, где спецификации постоянно меняются, а C - ужасный язык для прототипирования (это верно для большинства статически типизированных языков по моему опыту). Когда у вас есть что-то, работающее в C, вы редко меняете это значительно, чтобы оно стало «лучше», потому что у вас нет времени. Но иногда C проще, чем python, когда вам нужно контролировать ресурсы (будь то процессор, память и т. Д.).

Таким образом, вопрос на самом деле заключается в том, «когда питона недостаточно для выполнения задачи», а не наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...