В сущности мне существует два различия:
первое о том, что они делают и что они возвращают:
определение является ключевым словом, которое ничего не возвращает и создает 'имя' в локальном пространстве имен.
лямбда является ключевым словом, которое возвращает функциональный объект и не создает 'имя' в локальном пространстве имен.
Следовательно, если необходимо вызвать функцию, которая берет функциональный объект, единственный способ сделать, это в одной строке кода Python с лямбдой. Нет никакого эквивалента с определением
В некоторых платформах, это на самом деле довольно распространено; например, я использую Скрученный много, и таким образом делание чего-то как [1 117]
d.addCallback(lambda result: setattr(self, _someVariable, result))
довольно распространено, и более кратко с лямбдами.
второе различие о том, что фактической функции позволяют сделать.
, Например,
def p(x): print x
работы как ожидалось, в то время как
lambda x: print x
SyntaxError.
, Конечно, существуют обходные решения - замена print
с sys.stdout.write
, или import
с __import__
. Но обычно Вы - более обеспеченное движение с функцией в этом случае.
Вы можете просто объединить регулярные выражения, используя or ( |
) (и якоря для начала / конца строки).
Большинство хороших библиотек регулярных выражений оптимизируют свое конечное состояние автоматы после того, как они построят его из вашего регулярного выражения. PCRE делает это, например.
Этот шаг обычно решает вашу проблему оптимизации, т.е. они применяют большинство преобразований, которые вам придется делать «вручную».
Я не могу представить, даже если возможно, что результирующее регулярное выражение будет более эффективным.
Теоретически регулярное выражение является (недетерминированным) конечным автоматом; таким образом их можно объединить и свести к минимуму. В качестве отправной точки вы можете взглянуть на и .
Однако помните, что это может быть не самый правильный ответ. Почему вам приходится иметь дело с несколькими тысячами регулярных выражений? Я могу только вообразить черт возьми такой штуки. Возможно, вам стоит подумать о написании синтаксического анализатора и грамматики - это очень легко сделать (а грамматики в любом случае более мощные, чем регулярные выражения).
Я очень сомневаюсь в этом на том основании, что любой такой инструмент должен быть очень сложным, чтобы иметь дело со всеми различными способами, которыми можно комбинировать регулярные выражения.
Если бы регулярные выражения у вас относительно просты, например, в ваших примерах, однако, возможно, вам повезет написать свои собственные.