Passing around an ElementTree

你说的曾经没有我的故事 提交于 2019-12-25 04:47:10

问题


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?


回答1:


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




回答2:


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.




回答3:


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.



来源:https://stackoverflow.com/questions/3022746/passing-around-an-elementtree

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!