The Zope core is *written* in python (with hotspots coded in python modules written in C), not just integrated with it. Since DTML must be interpreted by the Zope core (an interpreter running in an interpreter), whereas the python code in an external method is simply (more or less) executed (just one interpretation level), I would expect external methods and python products to be a lot faster than the same functionality coded in DTML. But I'm speculating here based only on my current mental model of how Zope works, so I could be wrong <grin>.
I agree, again Im no expert, but from what I understand DTML is parsed into Python and then executed. You can skip that step altogether by not using DTML. I also find DTML is rather painful and anything involving 5 or 6 lines of DTML can be coded in *less* lines of more efficient Python!