【问题标题】:Importing a function inside another function在另一个函数中导​​入一个函数
【发布时间】:2026-02-14 10:10:01
【问题描述】:

假设我有一个脚本test.py,它有一个在另一个函数中的函数:

 x = 3
 def function_1(x):
     ...
     y = x + 7

     def function_2():
        return value

现在我想在另一个脚本中同时使用 function_1function_2。我该怎么做?

我试过了:

import test
from test import function_1
from function_1 import function_2

我基本上只是得到一个错误说No module named function_1。它确实导入了function_1,我可以使用它,但不能使用function_2。我不能只将function_1 设为一个类(它需要一个参数)。我怎样才能解决这个问题?我可以以某种方式使用_main_ 替换function_1 吗?然后我可以只导入function_2吗?

【问题讨论】:

  • 原来它们没有嵌套。但我试图在另一个脚本中运行完整的脚本(function_1 中的所有内容)。我能弄清楚如何做到这一点的最简单方法是使整个脚本成为一个函数,导入脚本,然后在另一个脚本中调用该函数。所以,澄清一下,1)我如何在另一个脚本中调用我的完整脚本(test.py),2)然后只调用function_2?我想如果我能做到#1,我就能做到#2。
  • 当你导入整个脚本时运行。你可以在全局命名空间中定义function_2,然后在某个地方的脚本中调用它。
  • 我已根据您的更新更新了我的答案。我希望它有所帮助。

标签: python python-3.x function python-import


【解决方案1】:

嵌套函数function_2 是外部函数的local 命名空间中的对象。当function_1 未运行时,它甚至不作为函数存在。

通常,嵌套函数要么为外部函数执行私有计算,要么以某种形式返回。在后一种情况下,您可以运行function_1 来获取对function_2 的引用。

您要导入的任何对象都应该在全局命名空间中,或者至少可以直接从中引用。更好的设计应该是

x = 3

def function_1(x):
    y = x + 7
    # Do some stuff, including using function_2
    return y

def function_2(value):
    # Do some stuff
    return value

请记住,定义函数与运行函数不同。作为推论,function_1 中的 x 与您在模块级别设置为 3 的 x 不同。

更新您的更新

您绝对可以将function_1 设为一个类,并将function_2 设为它的方法:

class function_1:
    def __call__(self, x):
        y = x + 7
        value = self.function_2(y)
        return y, value

    @staticmethod
    def function_2(value):
        return value

在这种情况下,您可以在其他脚本中执行以下操作:

from test import function_1

f1 = function_1()
# Call it:
f1(7)
# Call function_2:
function_1.function_2('blah')
# Or alternatively:
f1.function_2('foo')

【讨论】:

    最近更新 更多