Latest posts on Вопрос из книги Text processing in Python topichttp://python.su/forum/topic/543/2007-03-12T16:00:03+02:00Общий :: Python для экспертов :: Вопрос из книги Text processing in Python
2007-03-12T16:00:03+02:00Tmr3809Это самое очевидное применение, хотя его важность (тем более “почти необходимость”) в этом контексте довольно сомнительна. Меня заинтриговала подсказка в тексте:<br/><blockquote>Hint: Suppose you have a list of lines of text, where some of the lines may be empty strings. What filter can you apply to find all the lines that start with a #?</blockquote>Я сделал так:<br/>selected = filter(lambda x: x.startswith(“#”), open(“c:\\sandbox\\file.txt”).readlines())<br/>#или<br/>selected = <br/><br/>Работает хорошо.<br/>А как можно это сделать с полезным использованием ident в голову не приходит…<br/>offtopic: как включить подсветку python синтаксиса? <br/>подсветку уже нашел.
Общий :: Python для экспертов :: Вопрос из книги Text processing in Python
2007-03-12T15:34:26+02:00Александр Кошелев3808Возможно, когда цепочка преобразований определяется динамически(на основе ввода пользователя, полученных данных и т.д.), то чтобы не вставлять проверки на наличие функции, можно просто использовать ident, которая ничего не делает.
Общий :: Python для экспертов :: Вопрос из книги Text processing in Python
2007-03-12T14:50:16+02:00Tmr3806Вопрос к тем, кто книгу читал и тем, кому тема интересна.<br/>В первой главе определяется маленькая библиотека полезных функций высшего порядка combinatorial.py<br/> с таким содержимым:<br/>from operator import mul, add, truth<br/>apply_each = lambda fns, args=: map(apply, fns, *len(fns))<br/>bools = lambda lst: map(truth, lst)<br/>bool_each = lambda fns, args=: bools(apply_each(fns, args))<br/>conjoin = lambda fns, args=: reduce(mul, bool_each(fns, args))<br/>all = lambda fns: lambda arg, fns=fns: conjoin(fns, (arg,))<br/>both = lambda f,g: all((f,g))<br/>all3 = lambda f,g,h: all((f,g,h))<br/>and_ = lambda f,g: lambda x, f=f, g=g: f(x) and g(x)<br/>or_ = lambda f,g: lambda x, f=f, g=g: f(x) or g(x)<br/>disjoin = lambda fns, args=: reduce(add, bool_each(fns, args))<br/>some = lambda fns: lambda arg, fns=fns: disjoin(fns, (arg,))<br/>either = lambda f,g: some((f,g))<br/>anyof3 = lambda f,g,h: some((f,g,h))<br/>compose = lambda f,g: lambda x, f=f, g=g: f(g(x))<br/>compose3 = lambda f,g,h: lambda x, f=f, g=g, h=h: f(g(h(x)))<br/>shortcut_all = lambda fns: reduce(and_, fns)<br/>shortcut_some = lambda fns: reduce(or_, fns)<br/>not_ = lambda f: lambda x, f=f: not f(x)<br/>ident = lambda x: x<br/>Используется она в основном для комбинирования функций фильтрации и простых преобразований строк текста. Например:<br/>short_regvals = filter(both(shortline, isRegVal), lines)<br/>shortline = lambda line: len(line) < 25<br/>В книге есть вопрос:<br/><blockquote>The function ident() would appear to be pointless, since it simply returns whatever value is passed to it. In truth, ident() is an almost indispensable function for a combinatorial collection. Explain the significance of ident().<br/><br/>Hint: Suppose you have a list of lines of text, where some of the lines may be empty strings. What filter can you apply to find all the lines that start with a #?</blockquote>Перевод вкратце: в каких случаях функция ident() из combinatorial.py(определена последней) необходима/незаменима, в чем её значение?<br/>Что-то мне ни один случай её применения в голову не приходит… Есть идеи?