Python:从导入的文件调用函数

标签 python python-2.7

如何从导入的文件中调用函数?例如:

测试:

import test2
def aFunction():
    print "hi there"

测试 2:

import test
aFunction()

这给我一个名字错误,说我的函数没有定义。我也试过:

from test import aFunction

和:

from test import *

我也尝试过不在测试中导入 test2。我是从 C++ 转到 Python 的,所以我担心我遗漏了一些对于资深 Python 程序员来说非常明显的东西......

最佳答案

您正在创建循环导入。 test.py 导入 test2.py 尝试导入 test.py

不要这样做。当 test2 导入 test 时,该模块还没有完成所有代码的执行;该功能尚未定义:

  • test被编译执行,一个空的模块对象被添加到sys.modules

  • 运行 import test2 行。

    • test2 被编译执行,一个空的模块对象被添加到sys.modules

    • 运行 import test 行。

      • test 已经作为模块存在于 sys.modules 中,该对象被返回并绑定(bind)到名称 test
    • 下一行尝试运行 test.aFunction()test 中不存在这样的名称。引发异常。

  • 定义 def aFunction() 的行从未执行,因为引发了异常。

去掉import test2这一行,直接运行test2.py,导入函数就可以正常工作了:

import test

test.aFunction()

关于Python:从导入的文件调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19056240/

相关文章:

python - 如何在 Python 中修复 "No module named ' quaternion'"?

python - 我如何使用 Django 拥有多个导航路径,例如简化的向导路径和完整路径?

python - 使用 S3 子文件夹作为 Django 收集静态目标

python - 从 anaconda PyThreadState_Get : no current thread 在 C/C++ 中嵌入 Python

python - 值错误 : invalid literal for long() with base 10: '5B'

python - 使用 GDAL 将数据写入 GeoTiff 而不创建数据数组?

Python FTP 下载不工作

python - 为什么 Python 的 max() 函数会对带有前导空格的字符串设置较低的值?

python - 如何在Python 2.7中将BZ2直接解压到Popen stdin中?

python - 使用 python os 或 subprocess 模块在后台运行命令行程序