在另一个函数中导​​入一个函数

Importing a function inside another function

假设我有一个脚本,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 设为 class(它需要一个参数)。我怎样才能解决这个问题?我可以用 _main_ 代替 function_1 吗?我可以只导入 function_2 吗?

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

通常,嵌套函数要么为外部函数执行 私有 计算,要么以某种形式返回。在后一种情况下,您可以 运行 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变成class,然后把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')