请教一个python问题:from XXX import XXX

像类似于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都导入->所以你后面的程序就都可以使用了。

更多解释,可参考:
【教程】Python中的内置的模块 和第三方的模块
【已解决】Python中导入子文件夹中的模块

(此处不给贴地址,请自己用google搜标题,就可以找到地址了)

============
“xml.etree.ElementTree这是什么格式?”
可以看做是:
package.module.function

package.module.attribute

"ElementTree是一个module,etree是一个package?"
你的理解错了。
同上,ElementTree是一个function或attribute
etree是一个module

“那xml是什么?”
xml是package

详细解释,自己看:
【整理】Python中的module,library,package之间的区别
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-06
from Module import something
至于something是什么,只要是定义这这个module里的全局的anything都可以。
例如:
文件,explain.py
----------------------------------------------------
class aclass(object):
.........
.........

def doSomething():
...........
...........

version = '1.0'
----------------------------------------------------
那我们可以有如下的写法:
from explain import aclass
from explain import doSomething
from explain import version
或者:
from explain import *

之所以要在import后面加一个确定的目标对象,是为了减少import一些不必要的东东。
第2个回答  2018-03-30

你可以理解为:

对于:

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的资源提取到一个第三方文件去。总之就是将循环变成单向。

本回答被网友采纳
第3个回答  2013-01-04
你好
在from aaa import bbb中:
aaa是一个module
bbb是一个方法或者类
bbb是在aaa下的
就像from copy import deepcopy一样
这样讲希望你可以理解
相似回答