簡體   English   中英

如何從 numpy 而不是 numpy.ma.core 進行 pycharm 自動導入?

[英]How do I make pycharm autoimport from numpy rather than numpy.ma.core?

我使用了幾個 numpy 函數,為了可讀性,我更喜歡將它們一個一個導入,而不是作為 np.numpy 導入。

我使用 pycharm IDE,它會自動建議從 numpy.ma.core 導入,而不僅僅是 numpy。

過去我在使用掩碼數組時遇到過問題:當我期望它會出現錯誤時,它沒有引發錯誤,而且我沒有意識到由於 pycharm 的這種自動導入,我正在使用掩碼數組。 所以我想避免使用該庫,但如果 Pycharm 仍然可以為我自動執行導入,而不是我必須在代碼頂部手動執行它們,我會很高興。

這是函數復制的示例,來自 numpy。 Pycharm 建議從 numpy.ma.core 導入,我希望它只建議 numpy。

任何人?

Pycharm 中的自動完成

問題”

您想要的函數實際上列在您顯示的自動完成框中,它是numpy.lib.function_base.copy 您可以使用以下assert向自己證明這一點:

import numpy as np
assert np.lib.function_base.copy is np.copy

命名空間混淆的原因是numpy.copy函數實際上是numpy.lib.function_base定義的(鏈接到源代碼)。 numpy.lib.function_base.copy然后通過 Numpy 源代碼中頂級__init__.py文件中的代碼導出到頂級numpy命名空間。 因此,Pycharm是twigging到的原始定義copynumpy.lib.function_base.copy ,而不是在別名numpy.copy

更好的修復

用最強烈的話說,我建議您在代碼中切換到使用如下語法:

import numpy as np
np.copy(...)

代替任何用法,例如:

from numpy import copy
copy(...)

對此有兩個很好的論據,一個是哲學論點,另一個是實踐論點:

  • Python告訴我們

    顯式優於隱式。

    在您的代碼中使用np.copy類的np.copy立即告訴讀者您打算使用 Numpy 中的 copy 函數,而不是copy.copy 特別是如果你的.py文件有幾百行長,沒有人(包括三個月后的你自己)會知道你在它的頂部導入了什么,從而導致混亂。

  • 在實際層面上,像np.copy這樣的語法可以避免名稱沖突錯誤。 這是一種奇特的方式來指代您在打算使用numpy.copy時不小心使用numpy.ma.core.copy時遇到的那種問題。 Numpy 中的許多函數和方法都有非常通用的名稱( copyminmax等),使它們極易發生沖突錯誤。 此外,正如您所經歷的,頂級numpy包和 Numpy 中的其他地方都存在許多同名的函數,例如numpy.ma.core 處理這個問題的唯一好方法是np.copy樣式語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM