[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?
Thanks,
--
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