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

FTS может справка в этом сценарии, вопрос состоит в том, стоит ли это того или нет.

Для начала, давайте посмотрим на то, почему LIKE может не быть самый эффективный поиск. Когда Вы используете LIKE, особенно когда Вы ищете с % в начале Вашего сравнения, SQL Server должен выполнить и сканирование таблицы каждой строки и байт проверкой байта столбца, который Вы проверяете.

FTS имеет некоторые лучшие алгоритмы для соответствия данным, как делает некоторую лучшую статистику по изменениям имен. Поэтому FTS может обеспечить лучшую производительность для соответствия Smith, Smythe, Смизерса, и т.д. при поиске Smith.

Это, однако, немного более сложно для использования FTS, поскольку необходимо будет освоить CONTAINS по сравнению с FREETEXT и тайный формат поиска. Однако, если Вы хотите сделать поиск, где или FName или соответствие LName, можно сделать это с одним оператором вместо ИЛИ.

, Чтобы определить, будет ли FTS эффективным, определите, сколько данных Вы имеете. Я использую FTS на базе данных нескольких сотен миллионов строк, и это - реальная выгода по поиску с LIKE, но я не использую его на каждой таблице.

, Если Ваш размер таблицы более разумен, меньше чем несколько миллионов, можно получить подобную скорость путем создания индекса для каждого столбца, на котором Вы собираетесь быть поиском, и SQL Server должен выполнить индексное сканирование, а не сканирование таблицы.

20
задан 4 revs, 2 users 74% 20 November 2009 в 21:58
поделиться

13 ответов

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

Какие достоинства Python нравятся разработчикам?

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

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

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

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

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

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

11
ответ дан 29 November 2019 в 22:38
поделиться

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

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

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

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

18
ответ дан 29 November 2019 в 22:38
поделиться

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

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

15
ответ дан 29 November 2019 в 22:38
поделиться

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

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

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

  • наличие практиков во многих областях науки и техники
  • и, да,

    • «эффект стадного мышления», упомянутый в замечании, возможно, [сам?] насмешливым образом . Тот факт, что язык привлекает широкое, «сплоченное» сообщество, также делает его привлекательным, помимо поверхностных («круто выглядеть» и т.п.) черт стадного менталитета. В более широком контексте иногда лучшая технология / язык для использования измеряется не по его внутренним достоинствам, а по общей «картине», включая сообщество пользователей.
    2
    ответ дан 29 November 2019 в 22:38
    поделиться

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

    1
    ответ дан 29 November 2019 в 22:38
    поделиться

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

    То, что меня волнует в Python, в частности:

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

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

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

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

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

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

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

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

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

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

    Одно из самых прямых преимуществ, которые я получил от глубокого погружения в Python, состоит в том, что они значительно улучшили мой код C #. В общем, я мог понять код, в котором была переменная типа Dictionary > , но писать ее казалось неестественным. (Сегодня я использую статические словари для замены жестко запрограммированной логики гораздо чаще, чем год назад.) У меня нет проблем с пониманием того, что LINQ делает сейчас или как IEnumerable и return yield work.

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

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

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

    • Некоторые особенности, которые заставляют Python работать на нескольких платформах, также сбивают с толку. Легко использовать import , но действительно нелегко понять, что, черт возьми, он на самом деле делает. (Где он смотрит? Что делает __ init __. Py ? И т. Д.)

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

    11
    ответ дан 29 November 2019 в 22:38
    поделиться

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

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

    Pat O

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

    Pat O

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

    Pat O

    10
    ответ дан 29 November 2019 в 22:38
    поделиться

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

    4
    ответ дан 29 November 2019 в 22:38
    поделиться

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

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

    Я могу ' t программу на Python, потому что я не могу «думать» на Python. Я могу «думать» на Perl, поэтому я предпочитаю этот инструмент. Молчаливо страдающая масса пользователей Python, похоже, нашла давно утерянное спасение. Вот если бы они могли держать свое благовестие при себе :)

    1
    ответ дан 29 November 2019 в 22:38
    поделиться

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

    1
    ответ дан 29 November 2019 в 22:38
    поделиться

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

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

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

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

    0
    ответ дан 29 November 2019 в 22:38
    поделиться

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

    Python if __name__ == '__main __': набор поощряет повторное использование и разработку на основе тестирования.

    Например, позапрошлой ночью я взломал вместе, чтобы запустить тысячи ssh заданий (примерно 100 одновременно) и собрать все результаты (вывод, ошибка сообщения, значения выхода) ... и запишите время, затраченное на каждое. Он также обрабатывает тайм-ауты (команда ssh может зависать на неопределенное время при подключении к системе обработки данных - это тайм-ауты соединения и параметры повтора не действуют. t применяются после того, как соединение сокета установлено, независимо от того, останавливается ли аутентификация). Это займет всего несколько десятков строк Python, и действительно проще всего создать его как класс (определенный выше набора __ main __ ) и выполнить синтаксический анализ командной строки в простой оболочке внутри __ main __ . Этого достаточно для выполнения поставленной задачи (на следующий день я запустил сценарий на 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
    

    ... и т. Д.

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

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

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

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

    0
    ответ дан 29 November 2019 в 22:38
    поделиться

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

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

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

    0
    ответ дан 29 November 2019 в 22:38
    поделиться
    Другие вопросы по тегам:

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