像类似于from XXX import XXX这样的语句,比如说:from lxml import etree
我想问一下,etree是一个module吗?如果是的话那lxml是什么,还是一个module吗?
其实原话是这样的:
try:
from lxml import etree
except ImportError:
import xml.etree.ElementTree as etree
书上只是举了一个try...except语句的用例,但我对module、package之类的概念一直模糊,所以就顺便问问了,xml.etree.ElementTree这是什么格式?ElementTree是一个module,etree是一个package?那xml是什么?
谢谢!
你可以理解为:
对于:
from lxml import etree
是
from Module import Function或Class等
这个只是从模块中导入一个或几个函数或类的做法。
另外一个常见的是
import Module
你这里就是:
import lxml
是把整个模块中得东西,包括上面那单个etree都导入->所以你后面的程序就都可以使用了。
解决循环import的方法主要有几种:
1.延迟导入
即把import语句写在方法或函数里面,将它的作用域限制在局部。这种方法的缺点就是会有性能问题。
2.将from xxx import yyy改成import xxx;xxx.yyy来访问的形式
3.组织代码
出现循环import的问题往往意味着代码的布局有问题。可以合并或者分离竞争资源。合并的话就是都写到一个文件里面去。分离的话就是把需要import的资源提取到一个第三方文件去。总之就是将循环变成单向。
本回答被网友采纳