Antoon Pardon wrote: >> from xml.dom import * >> >> def do_add(x, y): >> return '%s://%s' % (x, y) >> >> def do_something(node): >> if node.namespace == XML_NAMESPACE: >> return do_add('http://', node.namespace) >> elif node.namespace == ... >> ... >> > > IMO your variable are already mostly declared. The x and y in > the do_add is kind of a declarartion for the parameters x and > y.
I think you missed his point, though I'm not surprised since unless you are familiar with the internals of the xml package it isn't obvious just how complex this situation is. The value XML_NAMESPACE was imported from xml.dom, but the xml package is kind of weird. XML_NAMESPACE defined both in xml.dom and in the _xmlplus.dom package. The _xmlplus package is conditionally imported by the xml package, and completely replaces it, but only if _xmlplus is present and at least version 0.8.4 (older versions are ignored). This is precisely the kind of flexibility which gives Python a lot of its power, but it means that you cannot tell without running the code which package actually provides xml.dom. Of course, I would expect that if you enforced strict variable declarations you would also disallow 'from x import *', but you still cannot tell until runtime whether an particular module will supply a particular variable, not what type it is. -- http://mail.python.org/mailman/listinfo/python-list