Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #12110

Re: is there any principle when writing python function

From Terry Reedy <tjreedy@udel.edu>
Subject Re: is there any principle when writing python function
Date 2011-08-23 14:19 -0400
References <CAN1FwxcMc0rFqw=DgOm_cCgvbymMOXjYQzefPxnhEkjyk9vUuQ@mail.gmail.com>
Newsgroups comp.lang.python
Message-ID <mailman.364.1314123599.27778.python-list@python.org> (permalink)

Show all headers | View raw


On 8/23/2011 7:59 AM, smith jack wrote:
> i have heard that function invocation in python is expensive,

That comes into play when chosing between

list2 = map(lambda x: 2*x, list1) # versus
list2 = [2*x for x in list1]

It also comes into play when choosing between looping with recursion 
(function calls) versus looping with iteration (while/for).  In Python, 
the iteration is faster, while some functional languages omit looping 
syntax constructs and perhaps auto-translate some recursion to iteration.

> but makelots of functions are a good design habit in many other languages,

Same for Python, with the exceptions noted above of avoiding trivial 
one-use functions when there is an alternative.

> is there any principle when writing python function?

Same as usual. Functions define new words and create new abstractions 
than encapsulate a unit of computation.

> for example, how many lines should form a function?

1 to many, as long as the 1 is more complex than 2*x, unless the trivial 
function is required for a callback. I doubt the stdlib has many defs 
longer than 100 lines.

Try the following: complex enough that the function call overhead does 
not matter; simple enough to be understood as a unit.

I just came up with the following hypothesis: the complexity of a 
function is related to the number of *different* functions used to 
define it:
     x = a*b + c/d - e**f
is more complex (harder to understand) than
     x = a + b + c + d + e + f

For this purpose, different statememts count as functions (and indeed, 
they translate to bytecode functions. So:
     for i in iterable:
        if f(i):
           print i
is more complex than
     a = 1
     b = 2
     c = 3
     d = 4

People can retain at most about 10 different things in short term 
memory. So perhaps 10 different 'functions' within a function, or at 
least a commented block, is enough.

-- 
Terry Jan Reedy

Back to comp.lang.python | Previous | Next | Find similar | Unroll thread


Thread

Re: is there any principle when writing python function Terry Reedy <tjreedy@udel.edu> - 2011-08-23 14:19 -0400

csiph-web