"unlist" a list
mmillikan at vfa.com
mmillikan at vfa.com
Thu Jan 17 10:34:33 EST 2002
More information about the Python-list mailing list
Thu Jan 17 10:34:33 EST 2002
- Previous message (by thread): "unlist" a list
- Next message (by thread): "unlist" a list
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
"Daniel Dittmar" <daniel.dittmar at sap.com> writes: > > I use a funktion that is defined as foo(v1,v2,*args), i.e. it is > > called as > > a = foo(v1,v2,opt1,opt2,opt3...) > > (in fact in my case foo is Tkinter.OptionMenu) > > > > Unfortunately, I have the optional arguments in list > > options = [opt1,opt2,opt3,...] > > and oviously foo(v1,v2,options) goes wrong since foo assumes that > > opt1 is the list options. > > use foo (v1, v2, *options) > or (in older Pythons) apply (foo, (v1, v2) + tuple (options)) > > Daniel The func(a,b,c,*more) spelling doesn't work when the sequence to be unpacked is in any other position than last in the parameter list: >>> zip(*seqseq,seq) File "<stdin>", line 1 zip(*seqseq,seq) ^ SyntaxError: invalid syntax Could this syntax be extended to allow the splicing to happen at any position within the parameter list? In the interim, the code below allows the construction: >>> zip(*splice(unnest(seqseq),seq)) [(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')] More elaborate splicing also appears to work: >>> splice([10,20,30],[],unnest(['sam',unnest(unnest(['barney','fred']))]),seq,()) [[10, 20, 30], [], 'sam', 'barney', 'fred', ('x', 'y', 'z'), ()] Only lightly tested, on 2.1.1 Feedback on utility and/or horrible flaws appreciated ------------------------------------------------------------------ #splice3.py (python 2.1.x) from __future__ import nested_scopes #not needed in 2.2 class unnest: '''A minimal wrapper for any sequence. When passed as an argument to the <splice> function the elements of the sequence will be spliced into the list returned replacing the <unnest> instance.''' def __init__(self,seq): if isinstance(seq,self.__class__): self.seq = seq.seq else: for item in seq: break self.seq = seq def __getitem__(self,index): return self.seq[index] def __len__(self): return len(self.seq) def splice(*args): '''Returns a list of its args with any instances of <unnest> replaced by the items of the unnests sequence attribute.''' def _splice(flat,*args): for arg in args: if isinstance(arg,unnest): _splice(flat,*arg.seq) else: flat.append(arg) return flat return _splice([],*args) Mark Millikan
- Previous message (by thread): "unlist" a list
- Next message (by thread): "unlist" a list
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list