Вот пример из стандартной библиотеки Python, inspect.py. Это в настоящее время читает
def strseq(object, convert, join=joinseq):
"""Recursively walk a sequence, stringifying each element."""
if type(object) in (list, tuple):
return join(map(lambda o, c=convert, j=join: strseq(o, c, j), object))
else:
return convert(object)
, Это имеет, как параметры, функция преобразования и функция соединения, и рекурсивно идет по спискам и кортежам. Рекурсия реализована с помощью карты (), где первый параметр является функцией. Код предшествует поддержке закрытий в Python, так нуждается в двух дополнительных параметрах по умолчанию, для передачи преобразовывают и присоединяются в рекурсивный вызов. С закрытиями это читает
def strseq(object, convert, join=joinseq):
"""Recursively walk a sequence, stringifying each element."""
if type(object) in (list, tuple):
return join(map(lambda o: strseq(o, convert, join), object))
else:
return convert(object)
На языках OO, Вы обычно не используете закрытия слишком часто, как можно использовать объекты передать состояние - и связанные методы, когда язык имеет их. Когда Python не имел закрытий, люди сказали, что Python эмулирует закрытия с объектами, тогда как Lisp эмулирует объекты с закрытиями. Как пример от НЕАКТИВНОГО (ClassBrowser.py):
class ClassBrowser: # shortened
def close(self, event=None):
self.top.destroy()
self.node.destroy()
def init(self, flist):
top.bind("<Escape>", self.close)
Здесь, self.close является обратным вызовом без параметров, вызванным, когда Escape нажимается. Однако для близкой реализации действительно нужны параметры - а именно, сам, и затем self.top, self.node. Если бы Python не имел связанных методов, Вы могли бы записать
class ClassBrowser:
def close(self, event=None):
self.top.destroy()
self.node.destroy()
def init(self, flist):
top.bind("<Escape>", lambda:self.close())
Здесь, лямбда добралась бы "сам" не от параметра, а от контекста.
You can search for most anything in your document using regular expressions. From normal mode, type '/' and then start typing your regular expression, and then press enter. '\<' would match the beginning of a word, so
/\<foo
would match the string 'foo' but only where it is at the beginning of a word (preceded by whitespace in most cases).
You can search for the backslash character by escaping it with a backslash, so:
/\<\\foo
Would find the pattern '\foo' at the beginning of a word.
Причина, по которой поиск чего-то, включающего "\", отличается, потому что "\" является специальным символом, и его нужно экранировать (с добавлением обратной косой черты)
Аналогично, для поиска " $ 100 », который включает специальный символ« $ »:
Press /
Type \$100
Press return
Для поиска« abc », который не включает специальный символ:
Press /
Type abc
Press return
Не имеет прямого отношения ( / \\ word
- правильное решение, и здесь ничего не меняет), но для вашей информации:
Если вы используете шаблон со многими символами, имеющими особое значение для регулярных выражений, вы можете найти полезными режимы «номагический» и «очень номагический».
/\V^.$
вместо этого будет искать буквальную строку ^. $
из «строк ровно одного символа» ( \ v
«очень волшебный» и по умолчанию \ m
«волшебный» режимы) или «строк ровно одной точки» ( \ M
"номагический" режим).