Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Re: My first ever Python program, comments welcome (http://www.velocityreviews.com/forums/t948364-re-my-first-ever-python-program-comments-welcome.html)

Dave Angel 07-21-2012 08:10 PM

Re: My first ever Python program, comments welcome
 
On 07/21/2012 03:08 PM, Lipska the Kat wrote:
> Greetings Pythoners
>
> A short while back I posted a message that described a task I had set
> myself. I wanted to implement the following bash shell script in Python
>


You already have comments from Ian and MRAB, and I'll try to point out
only things that they did not.

Congratulations on getting your first program running. And when reading
the following, remember that getting it right is more important than
getting it pretty.

> Here's the script
>
> sort -nr $1 | head -${2:-10}
>
> this script takes a filename and an optional number of lines to display
> and sorts the lines in numerical order, printing them to standard out.
> if no optional number of lines are input the script prints 10 lines
>
> Here's the file.
>
> 50 Parrots
> 12 Storage Jars
> 6 Lemon Currys
> 2 Pythons
> 14 Spam Fritters
> 23 Flying Circuses
> 1 Meaning Of Life
> 123 Holy Grails
> 76 Secret Policemans Balls
> 8 Something Completely Differents
> 12 Lives of Brian
> 49 Spatulas
>
>
> ... and here's my very first attempt at a Python program
> I'd be interested to know what you think, you can't hurt my feelings
> just be brutal (but fair). There is very little error checking as you
> can see and I'm sure you can crash the program easily.
> 'Better' implementations most welcome
>
> #! /usr/bin/env python3.2
>
> import fileinput
> from sys import argv
> from operator import itemgetter
>
> l=[]


I prefer to initialize an empty collection just before the loop that's
going to fill it. Then if you later decide to generalize some other
part of the code, it's less likely to break. So i'd move this line to
right-before the for loop.

> t = tuple


Even if you were going to use this initialization later, it doesn't do
what you think it does. It doesn't create a tuple, it just makes
another reference to the class. If you had wanted an empty tuple, you
should either do t=tuple(), or better t=()

> filename=argv[1]
> lineCount=10
>


I'd suggest getting into the habit of doing all your argv parsing in one
place. So check for argv[2] here, rather than inside the loop below.
Eventually you're going to have code complex enough to use an argument
parsing library. And of course, something to tell your use what the
arguments are supposed to be.

> with fileinput.input(files=(filename)) as f:


fileinput is much more general than you want for processing a single
file. That may be deliberate, if you're picturing somebody using
wildcards on their input. But if so, you should probably use a
different name, something that indicates plural.

> for line in f:
> t=(line.split('\t'))
> t[0]=int(t[0])
> l.append(t)



> l=sorted(l, key=itemgetter(0))
>


Your sample data has duplicate numbers. So you really ought to decide
how you'd like such lines sorted in the output. Your present code
simply preserves the present order of such lines. But if you remove the
key parameter entirely, the default sort order will sort with t[0] as
primary key, and t[1] as tie-breaker. That'd probably be what I'd do,
after trying to clarify with the client what the desired sort order was.

> try:
> inCount = int(argv[2])
> lineCount = inCount
> except IndexError:
> #just catch the error and continue
> None
>
> for c in range(lineCount):
> t=l[c]
> print(t[0], t[1], sep='\t', end='')
>
> Thanks
>
> Lipska
>
>


A totally off-the-wall query. Are you using a source control system,
such as git ? It can make you much braver about refactoring a working
program.

--

DaveA


Steven D'Aprano 07-22-2012 12:56 AM

Re: My first ever Python program, comments welcome
 
On Sat, 21 Jul 2012 16:10:51 -0400, Dave Angel wrote:

>> with fileinput.input(files=(filename)) as f:

>
> fileinput is much more general than you want for processing a single
> file. That may be deliberate, if you're picturing somebody using
> wildcards on their input. But if so, you should probably use a
> different name, something that indicates plural.


Also, fileinput is more a convenience module than a serious production
quality tool. It works, it does the job, but it can be slow. From the
source:

Performance: this module is unfortunately one of the slower ways of
processing large numbers of input lines.


--
Steven

rusi 07-22-2012 02:55 AM

Re: My first ever Python program, comments welcome
 
On Jul 22, 1:10*am, Dave Angel <d...@davea.name> wrote:

> A totally off-the-wall query. *Are you using a source control system,
> such as git ? *It can make you much braver about refactoring a working
> program.


Question in a similar vein: What development environment do you use?
My impression is that the majority of pythonistas use a non-ide editor
like vi or emacs
Ive been using emacs for 20 years and python-mode of emacs is very
useful but I am increasingly concerned that emacs is refusing to move
with the times.

Which is why I am particularly curious how an ol Java-head finds
eclipse+python (http://pydev.org/ )

Mark Lawrence 07-22-2012 08:14 AM

Re: My first ever Python program, comments welcome
 
On 22/07/2012 03:55, rusi wrote:
> On Jul 22, 1:10 am, Dave Angel <d...@davea.name> wrote:
>
>> A totally off-the-wall query. Are you using a source control system,
>> such as git ? It can make you much braver about refactoring a working
>> program.

>
> Question in a similar vein: What development environment do you use?
> My impression is that the majority of pythonistas use a non-ide editor
> like vi or emacs
> Ive been using emacs for 20 years and python-mode of emacs is very
> useful but I am increasingly concerned that emacs is refusing to move
> with the times.
>
> Which is why I am particularly curious how an ol Java-head finds
> eclipse+python (http://pydev.org/ )
>


Wouldn't describe myself as "an ol Java-head" but I disliked eclipse 10
years ago. I tried it again earlier this year and still disliked it.
It's like entering a legless cart horse for the Derby or the Grand National.

YMMV.

--
Cheers.

Mark Lawrence.


Andrew Berg 07-22-2012 08:49 AM

Re: My first ever Python program, comments welcome
 
On 7/22/2012 3:37 AM, Lipska the Kat wrote:
> Many in
> the Linux world seem to use git. Seeing as I've been using Linux at home
> since the early days of slackware I suppose I'd better look into it.

There are Mercurial (aka Hg) and Bazaar as well for DVCS. AFAIK, git,
Mercurial, and Bazaar are all fine choices and the one to use will
mainly boil down to personal preference. I prefer Mercurial myself.
--
CPython 3.3.0b1 | Windows NT 6.1.7601.17803

Chris Angelico 07-22-2012 10:17 AM

Re: My first ever Python program, comments welcome
 
On Sun, Jul 22, 2012 at 6:49 PM, Andrew Berg <bahamutzero8825@gmail.com> wrote:
> On 7/22/2012 3:37 AM, Lipska the Kat wrote:
>> Many in
>> the Linux world seem to use git. Seeing as I've been using Linux at home
>> since the early days of slackware I suppose I'd better look into it.

> There are Mercurial (aka Hg) and Bazaar as well for DVCS. AFAIK, git,
> Mercurial, and Bazaar are all fine choices and the one to use will
> mainly boil down to personal preference. I prefer Mercurial myself.


Agreed. I poked around with Bazaar a bit this year, and it seems to
lack some features. But certainly hg and git are both excellent
choices, with bzr not significantly far behind. I prefer git,
personally; on Windows, though, I would recommend hg.

Probably the best feature of any of them (one which, I believe, is now
standard in all three) is 'bisect' with a command. It's "git bisect
run", or "hg bisect -c", or "bzr bisect run". You can search back
through a huge time period without any human interaction. I did that a
while ago with a docs-building problem; the current state wouldn't
successfully generate its docs from a fresh start, even though it
could update them from a previous state. It took 45 minutes (!) of
chuggity-chug compilation to find the actual cause of the problem, and
no effort from me (since "make doc" already gave the right exit
codes). Use source control now; you'll reap the benefits later!

ChrisA

David 07-22-2012 10:46 AM

Re: My first ever Python program, comments welcome
 
On 22/07/2012, Lipska the Kat <lipska@lipskathekat.com> wrote:
> On 21/07/12 21:10, Dave Angel wrote:
>>
>> A totally off-the-wall query. Are you using a source control system,
>> such as git ? It can make you much braver about refactoring a working
>> program.

>
> Thanks for your comments, I've taken them on board,
> I'm most familiar with with cvs and svn for source control. I've also
> used Microsoft source safe. I generally just use what's given to me by
> whoever is paying me and don't worry too much about the details. Many in
> the Linux world seem to use git. Seeing as I've been using Linux at home
> since the early days of slackware I suppose I'd better look into it.


What Dave said. I used CVS briefly and then git and its gui tools for
last 5 years.
Took me a while to get comfortable with it, but now it turns managing complex,
evolving text files into fun and I cannot imagine working without its power and
flexibility. First thing I do on any programming task: git init

rusi 07-22-2012 04:18 PM

Re: My first ever Python program, comments welcome
 
On Jul 22, 2:20*pm, Lipska the Kat <lip...@lipskathekat.com> wrote:

> Well I have to say that I've used Eclipse with the myEclipse plugin for
> a number of years now and although it has it's moments it has earned me
> LOADS of MONEY so I can't really criticise it.


Ive probably tried to use eclipse about 4 times in the last 8 years.
Always run away in terror.
Still I'm never sure whether eclipse is stupid or I am...

First time I'm hearing of myEclipse. Thanks. What does it have/do that
standard eclipse (JDT?) does not?


> Python and eclipse ... Noooooooooooooooooooooooooooooooooooooooooo ;-)



Very curious about this. You made 'Loads of money' with eclipse but
want to stay away from it?
Simply cannot make out this thing called 'java-programmer-culture'...

rusi 07-24-2012 05:13 AM

Re: My first ever Python program, comments welcome
 
On Jul 22, 10:23*pm, Lipska the Kat <lip...@lipskathekat.com> wrote:

> Heh heh, Nothing to do with Eclipse, just another thing to get my head
> around. For work and Java IMHO you can't beat eclipse...
> at the moment I'm getting my head around git,


Bumped into this yesterday. Seems like a good aid to git-comprehension
https://github.com/git/git/blob/mast.../git-prompt.sh

> reminding myself of C, learning Python
> and re-learning make. Enough already; but if there's a python plugin I
> guess I'll get around to it eventually


Seems like a strange combo. It should be
(C&make)|(python&X)|(Java&Ant)
where X could range from
Setup http://docs.python.org/distutils/setupscript.html
to distribute http://guide.python-distribute.org/
to scons http://www.scons.org/

Why burden yourself by making the '|'s into '&'s?


All times are GMT. The time now is 04:30 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.