Re: A question about readability

2012-12-10 Thread rusi
On Dec 10, 3:03 pm, Jean-Michel Pichavant 
wrote:
> - Original Message -
> > On Dec 7, 6:46 pm, Marco  wrote:
> > > Hi all, do you think this code:
>
> > > $ more myscript.py
> > > for line in open('data.txt'):
> > >      result = sum(int(data) for data in line.split(';'))
> > >      print(result)
>
> > > that sums the elements of the lines of this file:
>
> > > $ more data.txt
> > > 30;44;99;88
> > > 11;17;16;50
> > > 33;91;77;15
> > > $ python3.3 myscript.py
> > > 261
> > > 94
> > > 216
>
> > > is explicit enough? Do you prefer a clearer solution?
> > > Thanks in advance, Marco
> > > --
> > > Marco
>
> > Interpreting your question as a general question of stylistics, my
> > experience is that a 3 line script often becomes a 10 line or a 50
> > line script at which point the direct printing will have to be
> > modified to create an internal data structure.
>
> > So on the whole I find it expedient to start with that assumption and
> > write it as:
>
> > def linesums(file):
> >   return [sum(int(i) for i in l.split(';')) for l in open(file, 'r')]
>
> Why change the OP's namings ? 'data' and 'line' were more suitable than 'i' 
> and 'l'. Of course we're nitpicking, no one will get hurt.
>
> JM

Yes, l is an undesirable name because it can look like 1
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: A question about readability

2012-12-10 Thread Jean-Michel Pichavant


- Original Message -
> On Dec 7, 6:46 pm, Marco  wrote:
> > Hi all, do you think this code:
> >
> > $ more myscript.py
> > for line in open('data.txt'):
> >      result = sum(int(data) for data in line.split(';'))
> >      print(result)
> >
> > that sums the elements of the lines of this file:
> >
> > $ more data.txt
> > 30;44;99;88
> > 11;17;16;50
> > 33;91;77;15
> > $ python3.3 myscript.py
> > 261
> > 94
> > 216
> >
> > is explicit enough? Do you prefer a clearer solution?
> > Thanks in advance, Marco
> > --
> > Marco
> 
> Interpreting your question as a general question of stylistics, my
> experience is that a 3 line script often becomes a 10 line or a 50
> line script at which point the direct printing will have to be
> modified to create an internal data structure.
> 
> So on the whole I find it expedient to start with that assumption and
> write it as:
> 
> def linesums(file):
>   return [sum(int(i) for i in l.split(';')) for l in open(file, 'r')]

Why change the OP's namings ? 'data' and 'line' were more suitable than 'i' and 
'l'. Of course we're nitpicking, no one will get hurt.

JM


-- IMPORTANT NOTICE: 

The contents of this email and any attachments are confidential and may also be 
privileged. If you are not the intended recipient, please notify the sender 
immediately and do not disclose the contents to any other person, use it for 
any purpose, or store or copy the information in any medium. Thank you.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: A question about readability

2012-12-07 Thread rusi
On Dec 7, 6:46 pm, Marco  wrote:
> Hi all, do you think this code:
>
> $ more myscript.py
> for line in open('data.txt'):
>      result = sum(int(data) for data in line.split(';'))
>      print(result)
>
> that sums the elements of the lines of this file:
>
> $ more data.txt
> 30;44;99;88
> 11;17;16;50
> 33;91;77;15
> $ python3.3 myscript.py
> 261
> 94
> 216
>
> is explicit enough? Do you prefer a clearer solution?
> Thanks in advance, Marco
> --
> Marco

Interpreting your question as a general question of stylistics, my
experience is that a 3 line script often becomes a 10 line or a 50
line script at which point the direct printing will have to be
modified to create an internal data structure.

So on the whole I find it expedient to start with that assumption and
write it as:

def linesums(file):
  return [sum(int(i) for i in l.split(';')) for l in open(file, 'r')]

Whether this one-liner is readable or not and how to make it more so
etc is probably bikeshedding.

More important questions are for example:
- Should you protect the open with a try
- When to list and when to generate(or)

All these are nice features of python but can lead to over-engineered
code
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: A question about readability

2012-12-07 Thread Steven D'Aprano
On Fri, 07 Dec 2012 14:46:03 +0100, Marco wrote:

> Hi all, do you think this code:
> 
> $ more myscript.py
> for line in open('data.txt'):
>  result = sum(int(data) for data in line.split(';'))
>  print(result)
[...]
> is explicit enough? Do you prefer a clearer solution? Thanks in advance,

It's perfectly fine for such a simple script. It is readable and explicit.


-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: A question about readability

2012-12-07 Thread Roy Smith
In article ,
 Marco  wrote:

> Hi all, do you think this code:
> 
> $ more myscript.py
> for line in open('data.txt'):
>  result = sum(int(data) for data in line.split(';'))
>  print(result)

That sum() line is a bit of a mouthful.  I would refactor it into 
something like this:

> for line in open('data.txt'):
>  fields = line.split(';')
>  print sum(int(i) for i in fields)

It's the same number of lines, but I think it's easier to read.

BTW, are you using Python 2 or 3?  It helps when asking these kinds of 
questions to let people know.  I assumed 2 in my answer above.
-- 
http://mail.python.org/mailman/listinfo/python-list


A question about readability

2012-12-07 Thread Marco

Hi all, do you think this code:

$ more myscript.py
for line in open('data.txt'):
result = sum(int(data) for data in line.split(';'))
print(result)

that sums the elements of the lines of this file:

$ more data.txt
30;44;99;88
11;17;16;50
33;91;77;15
$ python3.3 myscript.py
261
94
216

is explicit enough? Do you prefer a clearer solution?
Thanks in advance, Marco
--
Marco
--
http://mail.python.org/mailman/listinfo/python-list