2010-06-26 2 views
4

Можно создать дубликат:
What’s with the love of dynamic LanguagesЧто дает вам динамический язык, такой как python? Исходя из фона C#/java. покажи мне свет!

Иду из C#/Java фона т.е. сильно типизированных, язык ООП.

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

Какая энергия мне действительно нравится? (в веб-приложениях).

Может кто-нибудь изложить некоторые преимущества и интересные трюки, которые я могу сделать?

+6

Обязательная ссылка XKCD: http://xkcd.com/353/ –

+0

возможно дубликат http://stackoverflow.com/questions/42934/whats-with-the-love-of-dynamic-languages ​​HTTP: //stackoverflow.com/questions/125367/dynamic-type-languages-versus-static-type-languages ​​http://stackoverflow.com/questions/379128/how-do-you-program-differently-in-dynamic-languages –

+0

Это намного мощнее. Он также создает очень читаемый код. – jcao219

ответ

2

Мне понравилось сравниватьмежду Python и Java.

В связи с сетью я бы рекомендовал сделать простой пример с Django, чтобы увидеть, как он работает.

+2

Есть много потрясающих вещей о Python, но большинство жалоб на этот пост в блоге довольно унаследованы. Я думаю, что отсутствие параметров по умолчанию является недостатком, но, утверждая, что он тратит на исправление синтаксиса «5x столько времени» из-за скобок и фигурных скобок в Java, означает, что он делает это неправильно или не очень практикован при написании Java быстро.Кроме того, на самом деле это не охватывает «динамический» аспект, о котором спрашивал OP в первую очередь. –

+0

+1 для ссылок, но обратите внимание, что сравнение действительно больше списка недостатков java, чем что-либо еще. Это скорее аргумент против java, чем аргумент для python. –

0

Невозможно говорить для python как таковой, но на прошлой неделе я играл с классом PSObject в Powershell, который позволяет динамически добавлять элементы, методы и т. Д. Исходя из фона C++ \ C#, это казалось магическим - нет необходимости перекомпилировать, чтобы эти конструкты были встроены, что сделало его более приятным рабочим процессом для того, что я делал.

0

Python строго типизирован и ориентирован на объект, разница в том, что Python равен также динамический.

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

+2

, так зачем мне это делать? звучит интересно, но не ясно видно, какие последствия? – Blankman

1

Python (как и все динамические языки) отсылает поиск атрибутов до выполнения. Это позволяет вам преодолеть идеи полиморфизма и интерфейсов и использовать силу duck-typing, благодаря чему вы можете использовать тип, который просто выглядит, как будто он должен работать, вместо того, чтобы беспокоиться о своей родословной или о том, что она утверждает для реализации ,

5

Я не думаю о динамически типизированных языках, как о «разрешении прохладных трюков» (они делают это, но в основном это не очень удобно использовать «классные» трюки в производственном программном обеспечении - они пригождаются для тестирования, отладки и т. Д. , но когда дело доходит до получения хорошего, быстрые вещи, развернутые для производства, правила простоты).

Скорее, я думаю о таких языках, как «не мешаю», в частности, не замедляя меня, заставляя меня излишне указывать вещи снова и снова. Не все статически типизированные языки делает «встать на ваш путь» - хорошие с прочными, логически правильными типами систем, такие как Haskell, позволяют компилятору вывести типы (хотя вы можете с избытком указать их, если вы , например redundancy ... или, более того, если вам нужны более строгие ограничения, чем то, что компилятор действительно может вывести из кода). Но в Java (и в меньшей степени в C#, за исключением случаев, когда вы используете достаточно последнее ключевое слово var) избыточность является правилом, и это влияет на производительность.

Компромисс может быть предложен сторонними системами проверки для Python, например typecheck. Я не использую его сам, но я могу видеть, как кто-то, кто действительно считает статическую проверку типа, добавляет большую ценность, может быть доволен им. Существует даже синтаксис (который компилятор Python принимает, но ничего не делает) в последних версиях Python, чтобы вы могли аннотировать аргументы функции и возвращаемые значения - его цель - предоставить такие пакеты, как typecheck, для более естественного слияния с соответствующим языком (хотя я не думаю, что typecheck еще).

Edit:

Как я уже писал здесь, и я цитирую:

Я люблю объяснения Ван Рой и Haridi, с. 104-106 из their book, хотя я может или не может согласиться с их выводы (которые в основном , что внутренняя разница крошечная - они указывают на Оз и Алиса в качестве совместимых языков без и со статической типизации, соответственно) , все пункты, которые они делают, хороши. Самое главного, я считаю, как динамическая типизация позволяет в режиме реальной модульности (тверже со статической типизацией, поскольку типа дисциплина должна быть приведены в исполнение через границы модулей) и «разведочные вычислений в вычислительной модели, которая объединяет несколько программирования парадигм».

«Динамическая типизация рекомендуется», они заключают: «когда программы должны быть как гибкими, насколько это возможно». Я рекомендую чтение Agile Manifesto в понять, почему максимальная гибкость решающая роль в большинстве реальных приложений программирования - и, следовательно, почему в сказала реальный мир, а не в более научных кругах доктор Ван Рой и Dr. Хадиди перемещается, динамическая типизация обычно предпочтительнее, а не такая крошечная проблема, поскольку они делают разницу быть. Тем не менее, они по крайней мере показать больше осведомленности о проблемах, в посвящая 3 прекрасных страниц обсуждения о его, плюсов и минусы, чем почти любой другой книги, которую я видел - большинство книг четко очерчены и предварительно приоритет так или иначе, поэтому обсуждение редко бывает сбалансированным как то;).