affectation in if statement

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Tue Mar 16 06:53:22 EDT 2010


samb a écrit :
> Hi,
>> I've found a work around, inspired from Rob Williscroft :
>> class ReMatch(object):
> """
> Object to be called :
> 1st time : do a regexp.match and return the answer (args:
> regexp, line)
> 2nd time : return the previous result (args: prev)
> """
> def __call__(self, regexp='', line='', prev=False):
> if prev:
> return self.prev_match
> self.prev_match = re.match(regexp, line)
> return self.prev_match
>> re_match = ReMatch()
>> if re_match(r'define\s+(\S+)\s*{$', line):
> m = re_match(prev=True)
> # do some logic with m
> elif re_match(r'include\s+(\S+)$', line):
> m = re_match(prev=True)
> # do some logic with m
> else
> # do some logic
>> Hope this is efficient ... I guess yes.

A direct attribute access is cheaper than a method call, and makes for a 
simpler API too:
class ReMatch(object):
 match = None
 def __call__(self, regexp, source):
 self.match = re.match(regexp, source)
 return self.match
re_match = ReMatch()
if re_match(r'define\s+(\S+)\s*{$', line):
 m = re_match.match
 # do some logic with m
elif re_match(r'include\s+(\S+)$', line):
 m = re_match.match
 # do some logic with m
My 2 cents...


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /