我导入的帮助文件是否也需要导入语句?
Do helper files that I import, also need import statements?
我有一个包含绘图函数的帮助文件。
我还有我的主笔记本代码,它使用 imports sns
用于 seaborn,plt
用于 pyplot。
帮助程序文件本身没有 import
语句来导入这些模块。在我正在使用的笔记本中,然而,有如下语句:
import seaborn as sns
import matplotlib.pyplot as plt
我使用以下行导入我的帮助文件:from helpers.plotter import plots
当我调用该函数时出现以下错误:NameError: name 'plt' is not defined
我需要在帮助文件中包含那些导入语句吗?记在笔记本上还不够吗?
import
语句做了两件事:
- 如有必要,它会评估
.py
文件的内容以定义模块。
- 在当前模块中引入一个全局变量来引用导入的模块
#1 可能不会发生,例如,如果已经导入了相同的模块。 总是 是第 2 种情况,如果不这样做,就会导致您看到的错误。
所以是的,您需要在模块中使用 import
语句。
要添加到 chepner's answer,模块只定义一次,在内存中的一个位置。当你在helper模块中添加import语句时,python只是在helper模块中创建一个变量指向内存中的already-imported模块。从下面的实验中可以清楚地看出这一点:
文件argparsetest.py
import argparse
print("test:", hex(id(argparse)))
文件argparsemain.py
import argparsetest
import argparse
print("main:", hex(id(argparse)))
在 运行 python argparsemain.py
,我们得到:
test: 0x23c04b59048
main: 0x23c04b59048
如果您在 main.py
之前 导入 test.py
、
,那不会有什么不同
main: 0x130fc432f48
test: 0x130fc432f48
我有一个包含绘图函数的帮助文件。
我还有我的主笔记本代码,它使用 imports sns
用于 seaborn,plt
用于 pyplot。
帮助程序文件本身没有 import
语句来导入这些模块。在我正在使用的笔记本中,然而,有如下语句:
import seaborn as sns
import matplotlib.pyplot as plt
我使用以下行导入我的帮助文件:from helpers.plotter import plots
当我调用该函数时出现以下错误:NameError: name 'plt' is not defined
我需要在帮助文件中包含那些导入语句吗?记在笔记本上还不够吗?
import
语句做了两件事:
- 如有必要,它会评估
.py
文件的内容以定义模块。 - 在当前模块中引入一个全局变量来引用导入的模块
#1 可能不会发生,例如,如果已经导入了相同的模块。 总是 是第 2 种情况,如果不这样做,就会导致您看到的错误。
所以是的,您需要在模块中使用 import
语句。
要添加到 chepner's answer,模块只定义一次,在内存中的一个位置。当你在helper模块中添加import语句时,python只是在helper模块中创建一个变量指向内存中的already-imported模块。从下面的实验中可以清楚地看出这一点:
文件argparsetest.py
import argparse
print("test:", hex(id(argparse)))
文件argparsemain.py
import argparsetest
import argparse
print("main:", hex(id(argparse)))
在 运行 python argparsemain.py
,我们得到:
test: 0x23c04b59048
main: 0x23c04b59048
如果您在 main.py
之前 导入 test.py
、
main: 0x130fc432f48
test: 0x130fc432f48