Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用由另一个包导入的包是非Python的,还是直接导入?_Python_Import - Fatal编程技术网

使用由另一个包导入的包是非Python的,还是直接导入?

使用由另一个包导入的包是非Python的,还是直接导入?,python,import,Python,Import,例如,我想使用numpy的isnan函数。我已经加载了熊猫库: import pandas as pd pd.np.isnan(1) #=> False 这是可行的,但有什么缺点吗?还是我应该写 import pandas as pd import numpy as np np.isnan(1) #=> False 什么是好的做法?您应该使用第二种方法,至少有四个原因: 正如@abarnert在评论中所说,它遵循PEP 0008中所述的Python代码的官方指南。政治公众人物

例如,我想使用
numpy
isnan
函数。我已经加载了熊猫库:

import pandas as pd

pd.np.isnan(1) #=> False
这是可行的,但有什么缺点吗?还是我应该写

import pandas as pd
import numpy as np

np.isnan(1) #=> False

什么是好的做法?

您应该使用第二种方法,至少有四个原因:

  • 正如@abarnert在评论中所说,它遵循PEP 0008中所述的Python代码的官方指南。政治公众人物特别指出:

    所有未记录的接口都应假定为内部接口

    以及:

    导入的名称应始终视为实现细节。 其他模块不得依赖于对此类导入名称的间接访问 除非它们是包含这些文件的文件中明确记录的一部分 模块的API,例如
    os.path
    或包的
    \uuuu init\uuu
    模块 公开子模块的功能

    由于NumPy是熊猫图书馆的一个未经记录的方面(无论是在
    帮助(pd)
    中还是在官方网站上都没有提及),因此不应将其视为熊猫图书馆的官方部分

  • 第二种方法明确表示我们直接在代码中使用NumPy库。然而,第一种方法是通过熊猫图书馆“插入”

  • 代码分析工具将无法看到您的代码正在直接使用NumPy。这可能会生成有关代码的错误数据(例如它具有哪些依赖项)

  • Pandas包含NumPy的事实只不过是一个实现细节。也就是说,如果熊猫的制造者改变了他们的内部代码,以任何方式改变了这个细节,那么你所有的Numpy代码都可能在不应该的时候突然中断。Numpy和熊猫是两个独立的东西,应该这样对待


  • 我认为这确实有一个基于事实的答案,包含在中,应该重新打开。简言之:
    np
    没有记录在
    help(pd)
    或Pandas的基于web的帮助中,并且“所有未记录的接口都应该假定为内部接口。”Pandas没有一个排除
    np
    import numpy as
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    ,这一事实不太理想(虽然没有达到我称之为bug的程度),但这并不意味着没有文档化的意外暴露的名称是公共界面的一部分,重新导入
    numpy
    ,对性能没有影响,因为Python缓存导入。@EthanFurman:我怀疑他是否担心性能影响。任何导入速度最慢的程序都不太可能首先需要对性能进行优化,当然是第二个。如果需要
    numpy
    ,请导入并使用。不管其他软件包是否在使用它,这都不是你可以依赖的。他们的内部API可能会发生任何变化,您的代码也会崩溃;我敢肯定,有一些Pandas方法被记录为显式返回和/或获取NumPy数组,而Pandas是基于NumPy构建的,这一事实我想几乎每个人都会这么想。(然而,这并不意味着熊猫必须将
    numpy
    导出为
    np
    ,当然,这又回到了前两个答案。)我只是将这一点从我的评论转移到了我的答案中。我不经常使用熊猫,所以我只知道它的基本知识。我会把措辞改得不那么严格。