在另一个函数中导 入函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在另一个函数中导 入函数相关的知识,希望对你有一定的参考价值。

让我们说我有一个脚本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_2是外部函数的本地命名空间中的对象。当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

请记住,定义函数与运行函数不同。作为推论,x中的function_1与你在模块级别设置为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')

以上是关于在另一个函数中导 入函数的主要内容,如果未能解决你的问题,请参考以下文章

在 Fortran 中导入 .mat 文件 - 分段错误错误

在每个 .py 中导入一个函数

无法在nodejs中导入带有require()的模块

在 Vue 3 设置中导入函数

覆盖在命名空间中导入的函数

Vuejs 在另一个组件中导入组件