numpy - 我应该使用 `from numpy import *` 将 numpy(或 pylab)用作 python 环境吗?

标签 numpy coding-style python

我在我所有的 python 程序中都使用 pylab(更具体地说是 numpy)。异常(exception)情况非常罕见,如果有的话。到目前为止,我已经养成了通过以下方式导入 numpy 的习惯:

from numpy import *

这样做的好处是让 numpy 看起来从一开始就是 python 的一部分。在每个脚本中都像这样导入 numpy 有什么不好的地方吗?我的意思是除了每个脚本/程序都需要更多内存并且加载时间更长这一事实之外。

我认为总是必须在来自 numpy 的每个函数调用(例如,np.zeros(3))之前编写 numpy 甚至 np 是乏味的,因为它需要我知道哪个函数来自numpy 而不是。我真的不在乎 zeros 函数来自 numpy 还是 python,我只是想/需要使用它。

您认为哪种表示法更好?

最佳答案

  1. 使用 from numpy import * 改变 anyall求和。例如,

    any([[False]])
    # True
    all([[True, False], [False, False]])
    # True
    sum([[1,2],[3,4]], 1) 
    # TypeError: unsupported operand type(s) for +: 'int' and 'list'
    

    然而,如果你使用 from numpy import * 那么值就完全不同了:

    from numpy import *
    any([[False]])
    # False
    all([[True, False], [False, False]])
    # False
    sum([[1,2],[3,4]], 1) 
    array([3, 7])
    

    可以通过这种方式找到完整的名称冲突集(感谢@Joe Kington 和@jolvi 指出这一点):

    import numpy as np
    np_locals = set(np.__all__)
    builtins = set(dir(__builtins__))
    print([name for name in np_locals.intersection(builtins) if not name.startswith('__')])
    # ['any', 'all', 'sum']
    
  2. 这可能会导致非常困惑的错误,因为有人测试或使用您的 没有 from numpy import * 的 Python 解释器中的代码可能会完全看到 与你不同的行为。

  3. 使用 from module import * 形式的多次导入可以复合 更多此类碰撞的问题。如果你改掉这个坏习惯 芽,你永远不必担心这个(可能混淆的)错误。

    如果两个模块重新定义相同的名称,导入的顺序也很重要。

    这让人很难弄清楚函数和值的来源。

  4. 虽然可以使用 from numpy import * 并仍然访问 Python 的内置函数,但它很笨拙:

    from numpy import *
    any([[False]])
    __builtins__.any([[False]])
    

    可读性低于:

    import numpy as np
    np.any([[False]])
    any([[False]])
    
  5. 正如 Python 之禅所说,

    Namespaces are a honking great idea -- let's use more of those!

我的建议是永远不要在任何脚本中使用 from module import *

关于numpy - 我应该使用 `from numpy import *` 将 numpy(或 pylab)用作 python 环境吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748895/

相关文章:

c++ - 在 Python 中创建 C++ 类的实例并在其上调用方法

python - Numpy - 计算数组中固定距离的所有可能差异

python - C 中的 Numpy 数组

python - 如何在 Pandas 中矢量化动态大小的 numpy 数组

r - R 中的编码实践 : what are the advantages and disadvantages of different styles?

python - 如何在不使用for循环的情况下比较列表中的元素?

python - Imshow - 用不同的像素大小分割

Java和Web开发: good practices to store custom sensitive data such as private keys, API key 等

python - 如果我已经从前一个 block 中的函数返回,我应该使用 elif 吗?

Python Tkinter - 顶级 MoveInAnimation