I'm not keen on recursive code - code that calls itself. Very often, such code is elegant in a way, yet so 'clever' that it is hard to follow. There are, however, exceptions where I say
"THAT is a good use of recursion". Once such is in the handling / parsing of RSS (Really Simple Syndication) feeds.
I was asked by one of my delegates about how he might download and analyse an RSS feed in Python ... and after a quick scout around, we downloaded
feedparser. The code to grab the feed is silly-trivial:
import feedparser
stuff = feedparser.parse("http://www.wellho.net/horse/index.xml")
stuff, though, is a dictionary that contains other dictionaries, lists, and strings ... and those other dictionaries and strings contain further dictionaries and strings and lists. After all, RSS is an XML feed and the parse method give you back something synonymous with a DOM object.
So I have "pretty print"ed
stuff using a function I wrote called
display_dict which itself calls
display_dict and
display_list as appropriate.
display_list itself calls
display_list and
display_dict. You can see the source at
[link] (written 2009-11-18, updated 2009-11-20)
Associated topics are indexed under
Y105 - Python - Functions, Modules and Packages [3474] Python Packages - groupings of modules. An introduction - (2011-10-11)
[3472] Static variables in functions - and better ways using objects - (2011-10-10)
[3464] Passing optional and named parameters to python methods - (2011-10-04)
[3459] Catching the fishes first? - (2011-09-27)
[3280] Passing parameters to Python functions - the options you have - (2011-05-07)
[3159] Returning multiple values from a function call in various languages - a comparison - (2011-02-06)
[2998] Using an exception to initialise a static variable in a Python function / method - (2010-10-13)
[2994] Python - some common questions answered in code examples - (2010-10-10)
[2929] Passing a variable number of parameters in to a function / method - (2010-08-20)
[2878] Program for reliability and efficiency - do not duplicate, but rather share and re-use - (2010-07-19)
[2766] Optional and named parameters to Python functions/methods - (2010-05-15)
[2718] Python - access to variables in the outer scope - (2010-04-12)
[2520] Global and Enable - two misused words! - (2009-11-30)
[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)
[1879] Dynamic code - Python - (2008-11-11)
[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)
Y117 - Python - Already written modules [3479] Practical Extraction and Reporting - using Python and Extreme Programming - (2011-10-14)
[3465] How can I do an FTP transfer in Python? - (2011-10-05)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[2931] Syncronise - software, trains, and buses. Please! - (2010-08-22)
[2890] Dates and times in Python - (2010-07-27)
[2020] Learning Python - many new example programs - (2009-01-31)
Y151 - Python & XML [3082] XML handling in Python - SAX, DOM and XSLT examples - (2010-12-09)
[2555] Bookkeeping - (2009-12-29)
[2378] Handling XML in Perl - introduction and early examples - (2009-08-27)
Some other Articles
The music of the stock marketA life lesson from the accuracy of numbers in Excel and LuaCommunity Area Partnership - inaugural AGMAdmissionGood example of recursion in Python - analyse an RSS feedI almost put the bins out this morningLearning to program in ...Melksham manslaughter case concludes - sort ofMonday night, Tuesday nightSimples