[英]Importing numpy statement in script
我是一名Matlab编码人员,并且涉足各种Python。 我还没有深入了解python中的一个非常基本的概念/东西,它与from和import语句有关。
当我使用示例1从bitarray模块中导入bitarray(我是否正确地说出这句话?)时,我想在下面的脚本中使用它们时就调用它的方法。 但是,当我导入numpy时,由于出现错误,我无法使用2)中显示的代码,我必须使用3)中的语句,然后键入np。 在使用其任何方法之前,这是有道理的。 我也可以使用下面在4)中显示的更类似的语法导入位数组.......为什么2)在1)不能工作时不起作用? 我在祈祷一个简单的解释:) .....
1)
from bitarray import bitarray
2)
from numpy import numpy
3)
import numpy as np
4)
import bitarray as pp
这是由于bitarray
和numpy
之间的包结构不同; 具体来说,一个包含与模块本身同名的对象,另一个不包含。
所述bitarray
模块包含一个称为类bitarray
,(类似地,对于例如, datetime
在标准库模块包含datetime
类)。 因此,以下内容是等效的:
from bitarray import bitarray
ba = bitarray(...)
和
import bitarray
ba = bitarray.bitarray(...)
在前者,我们import
类 bitarray
直接进入从模块当前的命名空间; 在后者中,我们将整个模块导入为bitarray
并且需要通过指定模块名称空间来访问该类。
相比之下, numpy
不包含名为numpy
的对象,因此
from numpy import numpy
不起作用。
as
是分开的; 只是允许您为要导入的内容提供别名,因此以下任何一项都可以正常工作:
import numpy as np
a = np.array(...)
from bitarray import bitarray as pp
b = pp(...)
import bitarray as pp
b = pp.bitarray(...)
如上面的mauve
注释所示,您可以使用*
“通配符导入”来导入所有内容,因此:
from numpy import *
from bitarray import *
会将两个模块中的每个顶级名称导入当前名称空间。 之后,例如
a = array(...)
b = bitarray(...)
都可以正常工作。 但是, 不建议这样做,因为通常这是一个坏主意-例如, numpy
包含all
的定义,如果您导入所有内容,则它们将掩盖同名的内置函数。
而且,这使任何阅读您的代码(包括您的更高版本!)的人都很难确定所使用的类和函数的来源。 相比:
from numpy import *
from random import *
a = choice([1, 2, 3]) # which module did choice come from?
b = all(x == y for x in l) # is this numpy's all or the built-in?
更清晰:
import numpy as np
import random
a = random.choice([1, 2, 3]) # clearly from random
b = all(x == y for x in l) # must be the built-in, not np.all()
1)如果bitarray
是库 bitarray
的函数或类名,则它完全有效。
2)这没有意义,因为numpy
没有名为numpy
的函数。
3)这很好,因为您正在导入库并为其分配别名。
4)这也很好,因为您再次只是在别名下导入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.