繁体   English   中英

在脚本中导入numpy语句

[英]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

这是由于bitarraynumpy之间的包结构不同; 具体来说,一个包含与模块本身同名的对象,另一个不包含。

所述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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM