Каковы пределы Python? [закрытый]

./a.exe при подсказке

9
задан int3 27 November 2009 в 14:05
поделиться

9 ответов

Некоторые ограничения Python:

- Python работает медленно. Его можно улучшить разными способами (см. Другие ответы), но чистый cPython в 100 раз медленнее, чем C / C ++.

Эта проблема геттера все более и более смягчается. С Numpy, Pypy и asyncio большинство проблем с производительностью не покрывается, и узким местом в Python больше являются только очень конкретные варианты использования.

- Python открыт для всего. Очень сложно защитить / запутать / ограничить код Python.

- Python - это не ажиотаж. В отличие от Ruby, вокруг Python нет "крутой волны", и все же гораздо труднее найти опытного программиста на Python, чем, скажем, профессионала на Java или PHP.

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

- Труднее найти веб-хостинг, чем для популярных решений , таких как PHP.

- В качестве динамического языка у вас нет очень удобных инструментов рефакторинга вы можете использовать Java и Eclipse или C # и VS.

- По той же причине вы не можете полагаться на проверку типов как на страховочную сетку. Вот почему питонисты склонны следовать лучшим практикам и писать модульные тесты чаще, чем другие.

- Кажется, я просто не могу найти IDE с приличным завершением кода . PyDev, Gedit, Komodo, SPE и т. Д. Просто не делают это так хорошо, как могло бы быть.

С помощью подсказок типов Python 3 и таких инструментов, как PyCharm или Sublime Text + Anaconda, ситуация сильно изменилась.

- Лучшие документы по-прежнему доступны только на английском языке. Некоторым это не нравится.

- Вы должны привыкнуть к синтаксису. Вы не только получаете пробелы и разрывы строк вместо скобок, но и можете забыть о длинных лямбдах, --i и тернарных операциях.

Для меня это не повод не изучать инструмент, который заставит вас производить больше, получая больше удовольствия. Но, возможно, это только я: -)

Честно говоря, учитывая, что:

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

Если у вас нет профессиональных проблем, связанных с C ++, вам лучше сначала изучить Python, это более мотивирует.

38
ответ дан 4 December 2019 в 05:51
поделиться

Вот почему стоит изучать Python:

Сравнительно небольшое количество задач ограничено скоростью алгоритма. Сравнительно большое количество проблем ограничено скоростью разработчика.

32
ответ дан 4 December 2019 в 05:51
поделиться

Почему бы вам не задать обратный вопрос? В отличие от C ++, Python может дать вам антигравитацию и вызвать душ с помощью своей команды import . С другой стороны, «эквивалент» C ++ - #include - позволяет получить только скучные библиотеки ввода-вывода и математические библиотеки.

Если серьезно, то C ++ позволяет делать более низкие - например, программирование ядра, и позволяет писать программы, которые работают намного быстрее ( приблизительно ~ 20x). Вы можете использовать его для создания реальных потоков, которые могут использовать преимущества многоядерных процессоров, в то время как Python ( из-за его конструкции ) обычно может запускать свои смоделированные потоки только на одном ядре.

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

Более конкретные измерения разницы скоростей можно найти здесь.

Изменить: Похоже, моя информация о многопоточности устарела; см. комментарий Джона Полетта.

9
ответ дан 4 December 2019 в 05:51
поделиться

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

Если вы хотите заниматься программированием систем или приложений, вам следует изучить C ++. Если вы программируете для развлечения и досуга или для решения задач, например, на http://projecteuler.net/ , тогда Python тоже хороший выбор.

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

4
ответ дан 4 December 2019 в 05:51
поделиться

если вы пытаетесь выяснить, собираетесь ли вы по-прежнему работать время спустя, используя C ++ или Python, не беспокойтесь о долговечности одного языка. Научитесь программировать. Не учитесь программировать на <вставьте язык сюда>.

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

3
ответ дан 4 December 2019 в 05:51
поделиться

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

Если вашей целью является создание веб-материалов или сценариев, Python для вас. Для чего-то более продвинутого потребуется C ++.

При этом переходите на Python.

0
ответ дан 4 December 2019 в 05:51
поделиться

Как предлагали другие: изучите Python для изучения алгоритмов и концепций более высокого уровня и используйте его для создания прототипов и там, где это возможно. Изучите C / C ++ и / или Java для рынка труда и тех случаев, когда вы должны его использовать.

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

0
ответ дан 4 December 2019 в 05:51
поделиться

Одно существенное отличие, о котором не упоминалось до сих пор, - это разница между языком, подобным C ++, который строится на собственном коде, и языком, подобным Python, который по умолчанию ставит виртуальную машину между вами и оборудованием. Для выполнения низкоуровневой работы, такой как кодирование для ядра ОС, предпочтительным вариантом будет родной язык.

На практике, однако, когда вы работаете в этом контексте, это обычно означает отказ от C (в его роль переносимого ассемблера) вместо возможности использовать C ++ (и его библиотеки времени выполнения) для большей части, если не всего кода.

0
ответ дан 4 December 2019 в 05:51
поделиться

Из того, что мне сказали, 1% изучения C ++ - это изучение C. 1% - изучение дополнительных базовых функций. 98% учатся использовать функции безопасным, поддерживаемым способом и справляются с темными волосатыми уголками языка.

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

Ограничения на python?

  • Он интерпретируется, поэтому вам нужно отправить исходный код и интерпретатор ; и запуск процессов займет гораздо больше времени.
  • Это не C ++, поэтому он не будет работать с существующим кодом C ++.
  • Это немного медленнее (даже если включить горячие петли в C). *
  • Это побуждает вас быть «питонистом», и некоторые проблемы решаются легче, если вы не «питоник».

* Python может быть быстрее:

  • Автоматический сборщик мусора. C ++ работает быстрее, только если не слишком много утечек.
  • Словари. Большая часть кода выполняется за O (N плюс немного), а не за O (N ^ 2), если вы используете словарь. Конечно, вы можете использовать хеш-таблицу в C ++, но никто этого не делает.
  • Управление памятью - интерпретатор python кэширует память некоторых базовых структур данных, а затем перераспределяет их, вместо того, чтобы обращаться к системе за новой памятью. Это сокращает количество системных вызовов, что очень хорошо.
  • Профилирование новых алгоритмов на python намного проще. Во многих задачах лучший алгоритм важнее линейного ускорения (что дает вам C ++).
  • Если вы делаете программу, которая «запускается только один раз» (научный анализ, перенос данных и т. д.), то цикл компиляции-сборки-тестирования должен быть быстрее в python. Вот что действительно важно;)
1
ответ дан 4 December 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: