【问题标题】:Do helper files that I import, also need import statements?我导入的帮助文件是否也需要导入语句?
【发布时间】:2021-01-22 17:31:50
【问题描述】:

我有一个包含绘图功能的帮助文件。

我还有我的主要笔记本代码,它使用导入 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

我需要在帮助文件中包含这些导入语句吗?将它们放在笔记本中还不够吗?

【问题讨论】:

  • “我是否需要在帮助文件中包含这些导入语句”:显然,是的。
  • @PranavHosangadi 你在取笑我吗?! =P
  • 不!你回答了你自己的问题,我只是指出来:)

标签: python helper python-module


【解决方案1】:

import 语句做了两件事:

  1. 如有必要,它会评估 .py 文件的内容以定义模块。
  2. 它在当前模块中引入了一个全局变量来引用导入的模块。

#1 可能不会发生,例如,如果已经导入了相同的模块。第 2 条总是会发生,如果不这样做会导致您看到的错误。

所以是的,您需要在模块中使用 import 语句。

【讨论】:

    【解决方案2】:

    要添加到chepner's answer,模块只定义一次,到内存中的一个位置。在辅助模块中添加 import 语句时,python 只会在辅助模块中创建一个变量来指向内存中已经导入的模块。从下面的实验中可以清楚地看出这一点:

    文件 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 中使用import argparse 并没有什么不同导入test.py

    main: 0x130fc432f48
    test: 0x130fc432f48
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      相关资源
      最近更新 更多