tags:

views:

61

answers:

3

Hello.

In my program, I need to make use of an ElementTree object in various functions in my program.

More specifically, I am doing this:

tree = etree.parse('somefile.xml')

I am passing this tree around in my program.

I was wondering whether this is a good approach, or can I do this:

  1. Create a global tree (I come from a C++ background and I know global is bad)
  2. Create the tree again wherever required.

Or is my approach ok?

A: 

Passing it around is definitely better than recreating it every time you want to use it. Parsing the file is an expensive operation. Here are some suggestions for performance improvements with lxml.

Tom
+1  A: 

Usually what I do is parse the tree using ElementTree and then convert the whole mess into a list of objects and pass that around instead - much easier to deal with afterwards as the rest of the code doesn't have to be aware that the stuff originated from some god-awful xml file.

Khorkrak
+1  A: 

In Python, (eliding complexities, making an analogy for your C++ background) all objects are passed by reference. And since "tree" is an object, you're only passing the reference. Now, if you have a group of related methods that operate on the same tree, you might want to consider creating a class with that tree object as a member.

Also, here's a quick reference to the complexities I glossed over above: http://www.testingreflections.com/node/view/5126

gomad
Thanks for this.
sukhbir
You are welcome!
gomad