When I learned to program, named blocks of code (subroutines and functions) were built into each program and weren't things you could change at run time. But these days, in some languages like Python it's very different and you can write code that includes dynamic functions and methods - after all, in Python everything is an objects (including code) and you can change objects as your program runs.
What does this mean?
Well - here's a piece of valid code:
if kids < 3:
def more(current):
return current + 3
else:
def more(current):
return current + 8
and in that code I've defined a function in two different ways depending on the value of a variable. I can also
redefine it later on in my code if I wish - you can see that in a full example
here.
Is this capability a good idea? First comment - be careful how you use it, as it's open to abuse. BUT, yes, it can be very effective. For example, a complete application such as Plone can have default functions defined and they a user-supplied piece of code can replace a named function - a really useful, practical, and powerful facility.
(written 2008-11-11 23:11:41)
Associated topics are indexed under
Y105 - Python - Functions, Modules and Packages [2520] Global and Enable - two misused words! - (2009-11-30)
[2506] Good example of recursion in Python - analyse an RSS feed - (2009-11-18)
[2481] Sample code with errors in it on our web site - (2009-10-29)
[2440] Optional parameters to Python functions - (2009-10-07)
[2439] Multiple returns from a function in Python - (2009-10-06)
[2011] Conversion of OSI grid references to Eastings and Northings - (2009-01-28)
[1871] Optional and named parameters in Python - (2008-11-05)
[1870] What to do with a huge crop of apples - (2008-11-04)
[1869] Anonymous functions (lambdas) and map in Python - (2008-11-04)
[1790] Sharing variables with functions, but keeping them local too - Python - (2008-09-09)
[1784] Global - Tcl, PHP, Python - (2008-09-03)
[1464] Python Script - easy examples of lots of basics - (2007-12-08)
[1202] Returning multiple values from a function (Perl, PHP, Python) - (2007-05-24)
[1163] A better alternative to cutting and pasting code - (2007-04-26)
[1134] Function / method parameters with * and ** in Python - (2007-04-04)
[959] It's the 1st, not the 1nd 1rd or 1th. - (2006-12-01)
[949] Sludge off the mountain, and Python and PHP - (2006-11-27)
[913] Python - A list of methods - (2006-11-03)
[912] Recursion in Python - (2006-11-02)
[900] Python - function v method - (2006-10-20)
[821] Dynamic functions and names - Python - (2006-08-03)
[775] Do not duplicate your code - (2006-06-23)
[749] Cottage industry or production line data handling methods - (2006-06-07)
[745] Python modules. The distribution, The Cheese Shop and the Vaults of Parnassus. - (2006-06-05)
[668] Python - block insets help with documentation - (2006-04-04)
[561] Python's Generator functions - (2006-01-11)
[418] Difference between import and from in Python - (2005-08-18)
[386] What is a callback? - (2005-07-22)
[340] Code and code maintainance efficiency - (2005-06-08)
[308] Call by name v call by value - (2005-05-11)
[303] Lambdas in Python - (2005-05-06)
[294] Python generator functions, lambdas, and iterators - (2005-04-28)
[105] Distance Learning - (2004-10-31)
[96] Variable Scope - (2004-10-22)
Some other Articles
Spa Road Garage and Convenience Store, MelkshamWiltshire Council says - part 2Wiltshire Council says - part 1Melksham Chamber of Commerce, or the FSBDynamic code - PythonPascals Triangle in Python and JavaGuests doing a bunk?Python Regular ExpressionsWhat are exceptions - Python based answerIs it worth it?