classes and __iter__

david.garvey at gmail.com david.garvey at gmail.com
Mon Jan 9 21:30:17 EST 2012


Many thanks mrabarnett for the code critic...



On Mon, Jan 9, 2012 at 5:08 PM, MRAB <python at mrabarnett.plus.com> wrote:

> On 09/01/2012 22:51, david.garvey at gmail.com wrote:
>
>> Hello,
>>
>> I have a class and i return both a key list and dictionary from the
>> class. Is it good form to do this? The print helo.__dict__ shows both
>> the list and dictionary.
>>
>>
>>
>>  >>> class Parse_Nagios_Header:
>> ...     def __init__(self):
>> ...         self.keylist = []
>> ...         self.d = {}
>> ...         f = open("common.h")
>> ...         lines = f.readlines()
>> ...         lines = filter(lambda x: not x.isspace(), lines)
>> ...         f.close()
>> ...         for line in lines:
>> ...             if re.search("CMD", line):
>>
>
> You don't need to use a regex for this. It's better to do this instead:
>
>    if "CMD" in line:
>
>
>  ...                 line = line.lstrip('#define ')
>>
>
> The .lstrip, .rstrip and .strip methods treat the argument as a _set_
> of characters, so that line will strip the characters '#', 'd', 'e',
> 'f, 'i', 'n' and ' ' from the left end of the line however many times
> they occur.
>
>
>  ...                 line = line.strip()
>> ...                 line.replace('\t', ' ')
>> ...                 line = line.split()
>>
>
> The .split method, when called without an argument (or an argument of
> None), will split on a sequence of whitespace characters, but ignore
> leading and trailing whitespace.
>
> Therefore, there is no need to use the .strip method or the .replace
> (which will have no effect anyway because it _returns_ its result,
> which is then discarded) before the split.
>
>
>  ...             if len(line) > 2:
>> ...                 pass
>>
>
> The preceding two lines are pointless. Just turn the next line into an
> 'if'; it'll have the same effect.
>
>
>  ...             elif len(line) == 2:
>> ...                 line[1] = int(line[1])
>> ...                 self.d[line[1]] = line[0]
>> ...         self.keylist = sorted(self.d.iterkeys())
>> ...     def __iter__(self):
>> ...         return iter(self.keylist, self.d)
>> ...
>>
> [snip]
> --
> http://mail.python.org/**mailman/listinfo/python-list<http://mail.python.org/mailman/listinfo/python-list>
>



-- 
David Garvey
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20120109/bfcfbc02/attachment-0001.html>


More information about the Python-list mailing list