Подтвердить что ты не робот

Какие функции Python вызовут интерес разработчика С#?

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

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

Каковы хорошие вещи о Python, которые любят разработчики? Stuff thatll возбуждает меня больше, чем С#.

4b9b3361

Ответ 1

Я в первую очередь разработчик .NET и использую Python для личных проектов.

Каковы хорошие вещи, которые любят разработчики python?

Я могу сказать для себя - Python - это как глоток свежего воздуха.

1) Это просто, чтобы учиться, занял около недели для меня по вечерам. Я говорю о Python + Django. Синтаксис Python довольно прост.

2) Он прост в использовании. Никаких проблем с установкой Python + Django на Windows вообще.

3) Его можно запустить в Windows и UNIX.

4) Мне нужно это для Интернета, поэтому я получаю более дешевый хостинг, чем ASP.NET.

5) Все преимущества языка Python над С#. Как кортежи - так полезно!

Единственное, что мне не нравится, это то, что моя любимая IDE Visual Studio не поддерживает его (я знаю о IronPython, не беспокойтесь).

Ответ 2

Для меня это гибкость и элегантность, но есть несколько вещей, которые, как мне хотелось бы, можно было бы втянуть с других языков (более тонкие, более надежные выражения).

В типичном я могу написать немного кода в python и сделать намного больше, чем то же количество строк на многих других языках. Кроме того, в форме кода python имеет первостепенное значение, и синтаксис придает свой смысл высоко читабельному, чисто выглядящему коду. Это, конечно, помогает в обслуживании.

Мне нравится иметь интерпретатор командной строки, что я могу быстро прототипировать алгоритм вместо того, чтобы запускать новый проект, код, компилировать, тестировать, повторять. Не говоря уже о том, что я могу использовать его, чтобы помочь мне автоматизировать обслуживание моего сервера (я удваиваю SA для своей компании).

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

Ответ 3

Возможность ввода некоторого кода и немедленного получения результата.

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

Ответ 4

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

Что касается Python, который меня возбуждает, в частности:

  • Глубокая интеграция генераторов в язык. Это было первым, что заставило меня понять, что мне нужно долго и серьезно взглянуть на Python. Моя благодарность за это значительно углубилась, так как я стал знаком с модулем itertools, который выглядит как отличный набор инструментов, но на самом деле является новым образом жизни.

  • Сочетание динамической типизации и тот факт, что все, что объект делает довольно сложные методы, чрезвычайно просты в реализации. Так легко заменить логику таблицами в Python (например, o = class_map[k]() вместо if k='foo': o = Foo()), что она становится базовой техникой. Это так нормально в Python, чтобы писать методы, которые принимают методы как параметры, которые вы не поднимаете бровь, когда видите d = defaultdict(list).

  • zip и методы, которые разработаны с учетом этого. Требуется некоторое время, прежде чем вы сможете интуитивно понять, что делают dict(zip(k, v)) и d.update(zip(k, v)), но это момент смещения парадигмы, когда вы туда попадаете. Целый юниверс неинтересного и потенциально обремененного ошибками кода устранен, просто используя одну функцию. Затем вы начинаете создавать функции и классы с ожиданием, что они будут использоваться вместе с zip, и вдруг ваш код станет проще и проще. (Protip: Или itertools.izip. Или itertools.izip_longest.)

  • Говоря о словарях, то, как они глубоко интегрированы в язык. Понимание того, что представляет собой строка кода типа self.__dict__.update(**kwargs), является еще одним из этих моментов, связанных с парадигмой.

  • Разумеется, выведите список понятий и выражений генератора.

  • Недорогие исключения.

  • Интерактивный intepreter.

  • Декораторы функций.

  • IronPython, который намного проще в использовании, чем мы имеем право ожидать.

И это, даже не вдаваясь в замечательный массив функциональности в стандартных модулях или смехотворную награду сторонних инструментов, таких как BeautifulSoup или SQL Alchemy или Pylons.

Одна из самых прямых преимуществ, которые я получил от проникновения в Python, заключается в том, что он значительно улучшил мой код на С#. Я мог бы вообще понимать код, в котором в нем была переменная типа Dictionary<string, Action<Foo>>, но писать ее было неестественно. (Я использую статические словари для замены жестко кодированной логики гораздо чаще, чем я сделал год назад.) Мне не трудно понять, что делает LINQ сейчас, или как работают IEnumerable<T> и return yield.

Итак, что мне не нравится в Python?

  • Динамическая типизация действительно ограничивает то, что вы можете сделать при анализе статического кода. Не только такой инструмент, как Resharper для Python, на языке, где можно написать getattr(x, y)(), на самом деле не может быть.

  • У этого есть куча неэлегантных условностей. Как мне хотелось бы вернуться назад во времени и попытаться поговорить с GVR из идеи о том, что лямбда-выражения должны быть введены со словом lambda - это довольно оскорбительно, что что-то фундаментальное, как лямбда-выражения, должно быть более кратким в С# чем в Python. Ведущее и заключительное соглашение с двойным подчеркиванием ужасно, и тот факт, что люди взаимно соглашаются с ним, свидетельствует о наблюдении Достоевского, что человек - это животное, которое может привыкнуть ко всему. И не заставляйте меня начинать с того, что мне позволено выйти из модуля с именем StringIO.

  • Некоторые из функций, которые заставляют Python работать на нескольких платформах, также делают это несколько озадачивающим. Легко использовать import, но действительно нелегко понять, что, черт возьми, он на самом деле делает. (Где это выглядит? Что делает __init__.py и т.д.)

  • Удивительно богатая библиотека стандартных модулей настолько удивительно богата, что трудно понять, что в ней. Часто легче написать функцию, чем выяснять, есть ли что-то в стандартной библиотеке, которая делает то же самое - я смотрю на вас, itertools.chain.

Ответ 5

Ваш вопрос похож на водопроводчика, спрашивающего, почему плотники всегда идут и о молотах. Ведь у водопроводчика нет молотка и он никогда не пропустил его. Python (даже IronPython) и С# предназначены для разных типов разработчиков и различных типов программ. Я очень удобен в Python и наслаждаюсь свободой сосредоточиться на бизнес-правилах, не отвлекаясь на требования синтаксиса языка. С другой стороны, я написал довольно существенный код на С# и был бы очень обеспокоен отсутствием безопасности типов, если бы я взял ту же задачу в Python. Это не значит, что Python является "игрушечным" языком. Вы можете (и люди) написать полное среднее или большое приложение в Python. У вас есть свобода динамического ввода текста, но вы также несете ответственность за то, чтобы все было в порядке (помогите здесь помочь). Точно так же вы можете написать небольшое приложение на С#, но принесите некоторые накладные расходы, которые вам вряд ли нужны.

Так что если проблема заключается в использовании гвоздя молотком, если проблема заключается в винте, используйте отвертку. Другими словами, потратьте некоторое время на изучение Python, узнайте, что это streangths (обработка текста, быстрые циклы кодирования, простой чистый код и т.д.), А затем, когда вы смотрите на решение новой проблемы, спросите, будет ли вам лучше в Python или С#. Одно несомненно. Пока С# - единственный язык программирования, который вы знаете, это единственный, который вы когда-либо будете использовать.

Pat O

Ответ 6

Мой язык выбора - С#, и я до сих пор не совсем понял, что изучать Python пока. Этот разговор от PDC09 действительно вызвал мой интерес: парень демонстрирует, как вы можете использовать IronPython (или IronRuby), чтобы сделать приложение С# с возможностью сценариев (в его demo, поместите Python script в текстовое поле, и он работает с/расширяет ваш код С#). Мне показалось, что это действительно захватывающе: я даже не знаю, где я начну делать что-то подобное на С#, и это заставило меня хотя бы оценить, что это приносит что-то другое в таблицу, что может действительно обогатить то, что я могу развить!

Ответ 7

Я несимметричный пользователь обоих языков, в некотором смысле, что я использую С# в основном профессионально и Python для всех моих "забавных" проектов (не то, что работа никогда не бывает интересной, но... вы знаете...)

Это различие контекста может исказить мою точку зрения, в том числе мое мнение о том, что они представляют собой два разных типа (предназначенных для каламбур) языков, в основном для разных целей.

Это говорит о том, что не может быть совпадением, что Python на данный момент является [одним из?] языков выбора для всех видов передовых, несколько научных, технологий/научно-ориентированные проекты. (И BTW, это "научное" ключевое слово здесь doesNOT подразумевает, что Python - университетская игрушка, множество "серьезных" приложений в большом количестве доменов/промышленности являются доказательством обратного). Это может быть связано с несколькими факторами:

(Я не вырабатываю большинство точек, легко выраженных в других ответах)

  • открытость и квази универсальная доступность Python (в отличие от С#!)
  • легкий/легкость использования/низкая кривая обучения
  • обширная, высококачественная, "стандартная" библиотека и дополнительная библиотека экстенсивного (а иногда и bum-качества, но в целом доступная, открытая и т.д.).
  • широкий спектр проектов с открытым исходным кодом на языке Python
  • относительная легкость связывания с C/С++ для повторного использования устаревшего кода, а также для размещения критичных для производительности частей проекта
  • обычно более высокий уровень абстракции может содержать язык языка
  • мультипарадигмы (императивные, объектно-ориентированные и функциональные)
  • наличие практиков во многих областях науки и техники

и, да,

  • "эффект ментальности стада", упомянутый в замечании, возможно, высмеивающим [self?] образом. Тот факт, что язык привлекает широкое, "тесно связанное" сообщество, делает его привлекательным и за пределами поверхностных ( "выглядящих круто" и таких) черт стадного менталитета. В более широком контексте, иногда лучшие технологии/язык для использования не измеряются по своим внутренним достоинствам, а на общей "картинке", включая сообщество пользователей.

Ответ 8

Мне нравится вся информация с [] и {}. Селекторам нравится [-1:1]. Возможность писать меньше кода, но больше чего-то значимого, что дает писать Модели и другие декларативные вещи очень СУХОЙ.

Ответ 9

Как и любой язык программирования, это просто инструмент в ящике или кисти, с помощью которого вы можете нарисовать свое творение. Любые творческие усилия требуют, чтобы художник любил инструменты, которые он использует; в противном случае результат страдает. Некоторым людям нравится Python по той же причине, что другие любят Perl. Кстати, я обнаружил, что большинство любителей Python ненавидят Perl гибкий и выразительный синтаксис. Как любовник Perl, я не ненавижу Python, но считаю его чрезмерно структурированным и ограничительным.

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

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

Ответ 10

Если вы знакомы с .NET CLR и предпочитаете статически типизированный язык, но вам нравится легкий синтаксис Python, то, возможно, Boo это язык для вас.

Ответ 11

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

Кроме того, стандартная библиотека Python просто фантастична; его документация очень хорошо написана и содержит много очень полезных пакетов. Я также обнаружил, что существует множество хороших привязок для библиотек C, таких как PyGTK, Webkit и Qt, и это лишь некоторые из них.

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

Это отличный язык в целом, и (по крайней мере для меня) делает кодирование более продуктивным и приятным.

Ответ 12

Не поймите меня неправильно, я и всегда буду преданным поклонником С#.

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

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

Ответ 13

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

Пакет Python if __name__ == '__main__': поощряет повторное использование и разработку, основанную на тестах.

Например, прошлой ночью я взломал вместе, чтобы выполнить тысячи заданий ssh (около 100 одновременно) и собрать все результаты (вывод, сообщения об ошибках, значения выхода)... и записать время на каждого. Он также обрабатывает таймауты (команда An ssh может останавливаться на неопределенный срок при подключении к системе трения) - тайм-ауты подключения и параметры повтора не применяются после того, как соединение сокета выполнено, неважно, если аутентификационные киоски). Это занимает всего несколько десятков строк Python, и проще всего создать его в виде класса (определенного выше пакета __main__) и провести синтаксический анализ моей командной строки в простой оболочке внутри __main__. Этого достаточно, чтобы сделать работу под рукой (я запустил script на 25 000 хостов на следующий день, примерно через два часа). Теперь я могу использовать этот код в других сценариях так же легко, как:

from sshwrap import SSHJobMan

cmd = '/etc/init.d/foo restart'
targets = queryDB(some_criteria)

job = SSHJobMan(cmd, targets)
job.start()

while not job.done():
    completed = job.poll()
    # ...
    # Deal with incremental disposition of of completed jobs
for each in sorted(job.results):
    # ...
    # Summarize results

... и т.д.

Итак, мой script можно использовать для простых заданий... и его можно импортировать в виде модуля для более специализированной работы, которая не может быть описана в командной строке оболочки. (Например, я мог бы запускать подпроцессы "потребителя" для обработки других работ на каждом хосте, где задание было успешным, в то время как выплескивали служебные билеты или автоматические запросы на перезагрузку для всех хостов, которые сообщают о тайм-аутах или сбоях и т.д.).

Для модулей, которые не имеют автономного использования, я могу использовать набор __main__ для размещения модульных тестов. Таким образом, каждый модуль может содержать свои собственные тесты... которые, по сути, могут быть интегрированы в "строки документа" с использованием модуля doctest из стандартных библиотек. (Который, кстати, означает, что правильно отформатированные примеры в документарных комментариях могут быть синхронизированы с реализацией... поскольку они являются частью набора unit-test).