【问题标题】:Correct way and location of importing packages导入包的正确方式和位置
【发布时间】:2018-03-29 19:15:06
【问题描述】:

我有一个utils.py 文件,其中存储了我在主代码中使用的大部分函数。为了安全起见,我在主代码以及utils.py中导入了很多常用的库,如numpy、pandas等。

但是,在今天对我的代码进行春季清理时,我想知道这是否是导入库的最佳方式。我意识到 Python 不会重新加载已经加载的模块(除非明确要求 reload numpy as np)。但是如果我在utils.pyimport numpy as np,是否需要在主代码文件中再次导入这些库?我认为如果我在主代码中导入库,那么它们的命名空间应该是全局可用的,因此我不必在utils.py 中再次导入它们。对吗?

【问题讨论】:

标签: python


【解决方案1】:

这是不正确的。

导入的模块不会看到导入器的命名空间。 它的全局命名空间将是它自己文件的全局变量。

虽然导入器可以通过限定来查看导入的命名空间 使用模块名称,反之则行不通。

假设你有module1.pyutils.py

module1.py:
import sys
import utils

utils.print_args()

utils.py:
# import sys

def print_args():
    print(sys.argv)

运行module1.py 而不取消注释utils.py 中的import sys 将给出

NameError: name 'sys' is not defined

取消注释后得到

['module1.py']

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多