Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Март 12, 2007 14:50:16

Tmr
От:
Зарегистрирован: 2007-03-12
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос из книги Text processing in Python

Вопрос к тем, кто книгу читал и тем, кому тема интересна.
В первой главе определяется маленькая библиотека полезных функций высшего порядка combinatorial.py
с таким содержимым:
from operator import mul, add, truth
apply_each = lambda fns, args=: map(apply, fns, *len(fns))
bools = lambda lst: map(truth, lst)
bool_each = lambda fns, args=: bools(apply_each(fns, args))
conjoin = lambda fns, args=: reduce(mul, bool_each(fns, args))
all = lambda fns: lambda arg, fns=fns: conjoin(fns, (arg,))
both = lambda f,g: all((f,g))
all3 = lambda f,g,h: all((f,g,h))
and_ = lambda f,g: lambda x, f=f, g=g: f(x) and g(x)
or_ = lambda f,g: lambda x, f=f, g=g: f(x) or g(x)
disjoin = lambda fns, args=: reduce(add, bool_each(fns, args))
some = lambda fns: lambda arg, fns=fns: disjoin(fns, (arg,))
either = lambda f,g: some((f,g))
anyof3 = lambda f,g,h: some((f,g,h))
compose = lambda f,g: lambda x, f=f, g=g: f(g(x))
compose3 = lambda f,g,h: lambda x, f=f, g=g, h=h: f(g(h(x)))
shortcut_all = lambda fns: reduce(and_, fns)
shortcut_some = lambda fns: reduce(or_, fns)
not_ = lambda f: lambda x, f=f: not f(x)
ident = lambda x: x
Используется она в основном для комбинирования функций фильтрации и простых преобразований строк текста. Например:
short_regvals = filter(both(shortline, isRegVal), lines)
shortline = lambda line: len(line) < 25
В книге есть вопрос:

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().

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 #?
Перевод вкратце: в каких случаях функция ident() из combinatorial.py(определена последней) необходима/незаменима, в чем её значение?
Что-то мне ни один случай её применения в голову не приходит… Есть идеи?



Отредактировано (Март 12, 2007 16:16:01)

Офлайн

#2 Март 12, 2007 15:34:26

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Вопрос из книги Text processing in Python

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



Офлайн

#3 Март 12, 2007 16:00:03

Tmr
От:
Зарегистрирован: 2007-03-12
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос из книги Text processing in Python

Это самое очевидное применение, хотя его важность (тем более “почти необходимость”) в этом контексте довольно сомнительна. Меня заинтриговала подсказка в тексте:

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 #?
Я сделал так:
selected = filter(lambda x: x.startswith(“#”), open(“c:\\sandbox\\file.txt”).readlines())
#или
selected =

Работает хорошо.
А как можно это сделать с полезным использованием ident в голову не приходит…
offtopic: как включить подсветку python синтаксиса?
подсветку уже нашел.



Отредактировано (Март 12, 2007 16:12:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version