[PEAK] Peak rules example's simplification

Alexander Artemenko svetlyak.40wt at gmail.com
Fri Feb 27 01:06:40 EST 2009

Good day,

>> I found, that  example at http://pypi.python.org/pypi/PEAK-Rules/ page
>> can be simplified by omiting one part of the predicate in
>> pprint_long_list:
>> # Skip Skip
>> >>> @when(pprint, (list,))
>> ... def pprint_list(lst):
>> ...     print "pretty-printing a list"
>> >>> @when(pprint_list, "len(lst)>50") # Change 'pprint' to 'pprint_list'
>> >>> here and remove type check
>> ... def pprint_long_list(lst):
>> ...     print "pretty-printing a long list"
>> # Skip Skip
>> Is it feature or bug?
>> Which are the best practices in function extention, using Peak.Rules?
> Your version is still correct, but potentially much slower, since it does
> dispatching *twice*...  once to invoke pprint_list, and then once to select
> whether to run the original pprint_list or pprint_long_list.  This is slower
> because the dispatch algorithm runs more than once, and because the
> dispatcher can't optimize complex conditions that are split between the two
> functions.
> The only benefit to the way you're doing it here is that if pprint_list is
> ever used independently, it will still be modified by pprint_long_list.  But
> I'm not sure that even that is really a "benefit".

You right, but how about DRY priciple? My variant allows to not repeat one
predicate - 'isinstance(obj, (list,))'. Wat if later I'll decide to
change it, to accept
tuples or even iterators?

Is there any way to not repeat predicates from previous methods? Something like
decorators inheritance?

Alexander Artemenko (a.k.a. Svetlyak 40wt)
Blog: http://aartemenko.com
Photos: http://svetlyak.ru
Jabber: svetlyak.40wt at gmail.com

More information about the PEAK mailing list