Re: A question about readability

2012-12-10 Thread Jean-Michel Pichavant


- Original Message -
 On Dec 7, 6:46 pm, Marco name.surn...@gmail.com 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-10 Thread rusi
On Dec 10, 3:03 pm, Jean-Michel Pichavant jeanmic...@sequans.com
wrote:
 - Original Message -
  On Dec 7, 6:46 pm, Marco name.surn...@gmail.com 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-07 Thread Roy Smith
In article k9srup$kc7$1...@speranza.aioe.org,
 Marco name.surn...@gmail.com 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


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 rusi
On Dec 7, 6:46 pm, Marco name.surn...@gmail.com 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