import re
def get_pattern_query(pattern,starting_with=False,ending_with=False,ignore_case=False):
start = '^' if starting_with else '.*'
end = '$' if ending_with else '.*'
pattern = start + re.escape(pattern) + end
return re.compile(pattern, re.IGNORECASE) if ignore_case else re.compile(pattern)
Выключение шаблона перед компиляцией обрабатывает все символы.
Да, определенно найдите время, чтобы выучить хотя бы немного «vi» и «vim». Он очень хорошо переносится.
Вы никогда не застрянете, когда столкнетесь с клиентской системой Unix / Linux / Mac, для которой у вас нет возможностей установки. Даже в Windows (если у вас есть возможности установки) Vim бесплатен и прост в установке. (В отличие от инвестирования в обучение исключительно во что-то вроде UltraEdit, который, хотя отличный редактор может быть недоступен для вас все время ...).
Изучение vi может настроить вас на изучение других инструментов, таких как 'sed' , и регулярное выражение в целом: вещи, которые обычно можно передавать.
Кроме того, если вы хотите быть настоящим компьютерщиком, вам просто нужно знать 'vi / m', иначе вы будете выглядеть фальшивым; -)
Пройдите по коллекции. Отметьте этот элемент, если он нечетный, добавьте его в коллекцию результатов ".Во многих случаях код также будет представлять собой смесь обоих дизайнов, поэтому он не всегда черно-белый.
Императивное программирование явно сообщает компьютеру, что и как делать, например, указание порядка и т. Д.
C #:
for (int i = 0; i < 10; i++)
{
System.Console.WriteLine("Hello World!");
}
Декларативность - это когда вы говорите компьютеру, что делать , но не совсем как это сделать. Datalog / Prolog - это первый язык, который приходит на ум в этом отношении. В основном все декларативно. Вы не можете гарантировать порядок.
C # - гораздо более императивный язык программирования, но некоторые функции C # более декларативны, например Linq
dynamic foo = from c in someCollection
let x = someValue * 2
where c.SomeProperty < x
select new {c.SomeProperty, c.OtherProperty};
То же самое можно было бы написать императивно:
dynamic foo = SomeCollection.Where
(
c => c.SomeProperty < (SomeValue * 2)
)
.Select
(
c => new {c.SomeProperty, c.OtherProperty}
)
(пример из википедии Linq)
В информатике декларативное программирование - это парадигма программирования, которая выражает логику вычисления без описания его потока управления.
Из http://en.wikipedia.org/ wiki / Declarative_programming
в двух словах, декларативный язык проще, потому что ему не хватает сложности потока управления (циклы, операторы if и т. д.)
Хорошим сравнением является модель «кода программной части» ASP.Net. У вас есть декларативные файлы «.ASPX», а затем - обязательные файлы кода «ASPX.CS». Я часто обнаруживаю, что если я могу сделать все, что мне нужно в декларативной половине сценария, гораздо больше людей смогут следить за тем, что делается.
Я добавлю еще один пример, который редко всплывает при обсуждении декларативного / императивного программирования: пользовательский интерфейс!
В C # вы можете создавать пользовательский интерфейс, используя различные технологии.
Вкл. в императивном конце вы можете использовать DirectX или OpenGL, чтобы в обязательном порядке рисовать ваши кнопки, флажки и т. д. построчно (или действительно, треугольник за треугольником). Вам решать, как рисовать пользовательский интерфейс.
С декларативной стороны у вас есть WPF. Вы в основном пишете XML (да, да, технически "XAML"), и фреймворк делает всю работу за вас. Вы говорите, как выглядит пользовательский интерфейс. Система должна выяснить, как это сделать.
В любом случае, это еще одна вещь, о которой нужно подумать. Тот факт, что один язык является декларативным или императивным, не означает, что он не имеет определенных функций другого.
Декларативное программирование - это когда вы говорите , что вы хотите, а императивный язык - это когда вы говорите , как получить то, что вы хотите.
A простой пример на Python:
# Declarative
small_nums = [x for x in range(20) if x < 5]
# Imperative
small_nums = []
for i in range(20):
if i < 5:
small_nums.append(i)
Первый пример является декларативным, потому что мы не указываем никаких «деталей реализации» построения списка.
Чтобы связать пример C #, как правило, использование LINQ приводит к декларативному стилю, потому что вы не говорят , как получить то, что вы хотите; вы только говорите то, вы хотите. То же самое можно сказать и о SQL.
Одно из преимуществ декларативного программирования состоит в том, что оно позволяет компилятору принимать решения, которые могут привести к созданию лучшего кода, чем тот, который вы могли бы сделать вручную. При выполнении примера SQL, если у вас есть запрос типа
SELECT score FROM games WHERE id < 100;
, "компилятор" SQL может "оптимизировать" этот запрос, потому что он знает, что id
является индексированным полем - или, возможно, оно не индексируется, и в этом случае ему все равно придется перебирать весь набор данных. Или, может быть, механизм SQL знает, что сейчас идеальное время для использования всех 8 ядер для быстрого параллельного поиска. Вы , как программист, не интересуетесь ни одним из этих условий, и вам не нужно писать код, чтобы обрабатывать таким образом какой-либо особый случай.