itertools candidate: warehouse()
Robert Brewer
fumanchu at amor.org
Tue Oct 19 13:53:05 EDT 2004
More information about the Python-list mailing list
Tue Oct 19 13:53:05 EDT 2004
- Previous message (by thread): itertools candidate: warehouse()
- Next message (by thread): itertools candidate: warehouse()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Raymond Hettinger wrote: > > "Robert Brewer" <fumanchu at amor.org> wrote ... > > > > def warehouse(stock, factory=None): > > Here are some random thoughts based on a first read through: > > * The basic idea of iterating stock and then calling a > factory when the > stock is depleted is already expressible in terms of itertools. For > example, if random.random() is the factory: > > iavailable = chain(stock, starmap(random.random, repeat(()))) Ah, thanks! The docs don't really make it clear that you can pass a callable to repeat() and have it be called on each iteration. The Python "equivalent" given in the docs looks like you get the same static object every time... :/ > * The second iterator, iremainder, ventures well beyond the basic idea > of a warehouse/factory chain. It pushes the learning curve up steeply > and makes the function less generic (i.e. plenty of situations that > could use the warehouse/factory chain have no need for the separate > iremainder iterator). True. Dang, I wish generators could take attributes; I would've attached iremainder there instead and reduced the learning curve a bit for those who don't need that feature. > * Making the factory argument optional is, IMO, also trying to do too > much. Using the first stock item to identify a type and then calling > the type is probably more appropriate for prototype based OO > (i.e. with objects designed for cloning operations). Also, the number > of potential uses is limited because knowing the type does not imply > that you know the signature for the constructor or that you can infer > argument values for constructors that take arguments. The uses are limited only when you do not supply the factory argument; when I need constructor arguments, I make a factory function for the class and pass that for the 'factory' arg. > * This function has not seen real world use outside your organization. Right. > Posting it as an ASPN recipe might give it a chance to be > kicked around a bit and perhaps re-emerge in a more mature form. The cookbook is a good idea (this makes a better recipe than a module func; I agree 100%). But I don't find ASPN a place which stimulates "kicking things around", because there's no critical community mass. c.l.p is still better for that, IMO. > * Most of the itertools and their kin only try to encapsulate > a tiny bit > of logic (enumerate and takewhile for example). Even the most complex > tool, groupby(), is built around an atomic idea (roughly akin to the > uniq filter in Unix uniq). The bite sized approach enables > itertools to > simplify code without obscuring the program logic. IMO, the proposed > warehouse() function does not share that advantage (though it is > possible that repetition may allow ones mind to eventually > condense the > logic into a managable unit of thought). Agreed. Thanks for the feedback! Robert Brewer MIS Amor Ministries fumanchu at amor.org
- Previous message (by thread): itertools candidate: warehouse()
- Next message (by thread): itertools candidate: warehouse()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list