- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用了几个 numpy 函数,为了便于阅读,我更喜欢将它们一一导入,而不是导入为 np。
我使用 pycharm IDE,它会自动建议从 numpy.ma.core 导入,而不仅仅是 numpy。
我过去在使用屏蔽数组时遇到了问题:当我期望它会出现错误时,它没有引发错误,而且我没有意识到我正在使用屏蔽数组,因为这是从 pycharm 自动导入的。因此,我想避免使用该库,但如果 Pycharm 仍然可以自动为我执行导入,而不是我必须在代码顶部手动执行它们,我会很高兴。
这是来自 numpy 的函数复制示例。 Pycharm 建议从 numpy.ma.core 导入,我希望它仅建议 numpy。
有人吗?
最佳答案
您想要的函数实际上列在您显示的自动完成框中,它是numpy.lib.function_base.copy
。您可以使用以下断言
向自己证明这一点:
import numpy as np
assert np.lib.function_base.copy is np.copy
namespace 困惑的原因是 numpy.copy
函数实际上是 defined in numpy.lib.function_base
(链接转到源)。然后通过 Numpy 中顶级 __init__.py
文件中的代码将 numpy.lib.function_base.copy 导出到顶级 numpy
命名空间来源。因此,Pycharm 在 numpy.lib.function_base.copy
处切换到 copy
的原始定义,而不是 numpy.copy
处的别名。
最强烈的说法是,我建议您在代码中改用如下语法:
import numpy as np
np.copy(...)
代替任何用法,例如:
from numpy import copy
copy(...)
对此有两个很好的论据,一个是哲学论据,一个是实践论据:
Zen of Python告诉我们
Explicit is better than implicit.
代码中像 np.copy
这样的用法会立即告诉读者您的意思是使用 Numpy 中的复制函数,而不是 copy.copy
.特别是如果您的 .py 文件有几百行长,那么没有人(包括三个月后的您自己)会知道您在其顶部导入的内容,从而导致困惑。
在实践层面上,像 np.copy
这样的语法可以避免名称冲突错误。这是一种奇特的方式来指代当您打算使用 numpy.copy 时意外使用 numpy.ma.core.copy 时遇到的问题。 Numpy 中的许多函数和方法都有非常通用的名称(copy
、min
、max
等),这使得它们极易出现冲突错误。此外,正如您所经历的,许多具有相同名称的函数都存在于顶级 numpy 包和 Numpy 中的其他位置,例如 numpy.ma.core 。处理此问题的唯一好方法是 np.copy
样式语法。
关于python - 如何从 numpy 而不是 numpy.ma.core 进行 pycharm 自动导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165379/
我是一名优秀的程序员,十分优秀!