[Tutor] Python best practices
alan.gauld at btinternet.com
Mon Nov 30 11:06:14 CET 2009
Code Complete by Steve McConnell is an excellent book
and I agree with almost everything in it. Including
the advice about functions.
But as I said earlier the concept of multiple return
values in Python is similar to returning a struct in C.
The key thing is that the function has a single purpose
so if returning multiple values or a struct the values
within that group should be related to the single purpose
In other words don't write a function called
def getLengthOrContent(dataStream, flag)
data = readData(dataAStream)
Thats what I think is meant by bad practice in returning
multiple values. The function returns two completely different
things depending on some input flag.
Author of the Learn To Program website
From: Albert-Jan Roskam <fomcl at yahoo.com>
To: tutor at python.org; Alan Gauld <alan.gauld at btinternet.com>
Sent: Monday, 30 November, 2009 9:58:21
Subject: Re: [Tutor] Python best practices
I'm currently reading the book "Code Complete" (I don't know the author name), which gives a lot of useful best practices. It's not specifically about one programming language. The author stresses that the majority of those practices are a matter of consensus/consistency and not a matter of religion. There is no one best way to do it.
Re: functions, the author recommends that they have one purpose and one purpose only, and that a function returns only one result.
In the face of ambiguity, refuse the temptation to guess.
--- On Mon, 11/30/09, Alan Gauld <alan.gauld at btinternet.com> wrote:
>From: Alan Gauld <alan.gauld at btinternet.com>
>Subject: Re: [Tutor] Python best practices
>To: tutor at python.org
>Date: Monday, November 30, 2009, 1:57 AM
>"spir" <denis.spir at free.fr> wrote
>>> > - functions should return one value (im not 100% of this one)
>>> I 100% disagree or with this one.
>> Could you explain this bit, Lie? I'm very interested.
>> I use multiple-value result myself, for it's so practicle in given cases.
>My take on this is that in Python its OK to return multiple values if it
>is as a tuple - because a tuple is really a single value. Its like returning
>a record in Pascal or a struct in C or a List in Lisp...
>> But it makes me uneasy; also have the impression (why?) it
>> reveals wrong design.
>Its better than....
>> a function both to have an effect (eg assignment outside the func scope) and
>> return a value.
>Side effects in functions are
> nearly always bad news and are always
>avoidable if you can return multiple values (or pass arguments by reference).
>> "Command-Query Separation Principle" (Eiffel) & Pascal "procedure vs function".
>You can have Command/Query separation without having side-effects.
>A Query is a procedure or function that doesn't change anything but just
>returns a result. A Command changes something, but it can be the thing
>passed to it - or if a method of a class the internal data of the class.
>Again a command can be a function or a procedure. Those are separate
>concepts. (I very rarely write procedures in real programs - there is nearly
>always something useful you can return - and in an object that's usually
>a minimum of self! (Returning self is the default idiom in Smalltalk - it
>allows chaining of methods)
>Tutor maillist -
> Tutor at python.org
>To unsubscribe or change subscription options:
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Tutor