|
From: Duncan Booth <duncan.booth <at> invalid.invalid>
Subject: Re: Having fun with python Newsgroups: gmane.comp.python.general Date: 2007-10-03 08:48:32 GMT (1 year, 39 weeks, 3 days, 7 hours and 1 minute ago)
Tzury <Afro.Systems <at> gmail.com> wrote:
> def loadResMap(self):
> self.resMap = []
> [[self.resMap.append(str('A2' + sim[0] + '/r' + str(x)))
> for x in range(1, eval(sim[1])+1)]
> for sim in [x.split(':')
> for x in quickViews.smsResList.v.split(",")]]
> '''
> # Confused? Have this one:
>
> data = quickViews.smsResList.v
> sims, slots = [], data.split(",")
> for slot in slots:
> sims.append(slot.split(':'))
> for sim in sims:
> for x in range(1, eval(sim[1])+1):
> self.resMap.append(str('A2' + sim[0] + '/r' +
> str(x)))
>
> # same functionality different approaches
> # forloops vs. list comprehension
> # redability vs. smartassicity
> # AKA: You have read too many Lisp books
> '''
>
The first one is stupid because it build a list of None objects and then
throws it away.
The second one goes too far avoiding all list comprehensions:
sims = [ slot.split(':')
for slot in quickViews.smsResList.v.split(',') ]
is perfectly manageable, although it looks like there should be a method
'getSims' on quickviews or smsResList or something that returns the data
in the correct (already split) format.
The 'eval' is almost certainly a mistake in both variants. Probably you
just meant to call 'int'. Also a format string would be clearer:
for a, b in sims:
self.resMap.extend("A2%s/r%d" % (a, x+1)) for x in range(int(b)))
However, one point you have shown very clearly: the second one is much
easier to tear apart and reassemble.
--
http://mail.python.org/mailman/listinfo/python-list
|
|
|