A question about readability

Discussion in 'Python' started by Marco, Dec 7, 2012.

  1. Marco

    Marco Guest

    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
     
    Marco, Dec 7, 2012
    #1
    1. Advertising

  2. Marco

    Roy Smith Guest

    In article <k9srup$kc7$>,
    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.
     
    Roy Smith, Dec 7, 2012
    #2
    1. Advertising

  3. 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
     
    Steven D'Aprano, Dec 7, 2012
    #3
  4. Marco

    rusi Guest

    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
     
    rusi, Dec 7, 2012
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. David Stockwell
    Replies:
    3
    Views:
    327
    Peter Hansen
    Jun 2, 2004
  2. Replies:
    9
    Views:
    357
    Jerry Coffin
    Jul 28, 2006
  3. DE
    Replies:
    16
    Views:
    839
  4. Replies:
    3
    Views:
    256
    Nick Keighley
    Mar 17, 2010
  5. rusi
    Replies:
    0
    Views:
    173
Loading...

Share This Page