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

Python 在另一个函数中导入函数,python,python-3.x,function,python-import,Python,Python 3.x,Function,Python Import,假设我有一个脚本,test.py,它有一个函数,可以在另一个函数中使用: x = 3 def function_1(x): ... y = x + 7 def function_2(): return value 现在我想在另一个脚本中同时使用function_1和function_2。我该怎么做 我试过这个: import test from test import function_1 from function_1 import fun

假设我有一个脚本,
test.py
,它有一个函数,可以在另一个函数中使用:

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

     def function_2():
        return value
现在我想在另一个脚本中同时使用
function_1
function_2
。我该怎么做

我试过这个:

import test
from test import function_1
from function_1 import function_2

我基本上只是得到一个错误,说
没有名为function\u 1的模块。它确实导入了
函数_1
,我可以使用它,但不能导入
函数_2
。我不能把
函数1
当作一个类(它需要一个参数)。我怎样才能解决这个问题?我是否可以使用
\u main\u
替换
功能\u 1
?然后我是否可以只导入
函数_2

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

通常,嵌套函数要么为外部函数执行私有计算,要么以某种形式返回。在后一种情况下,您可以运行
function\u 1
以获取对
function\u 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
内部的
函数_1
与您在模块级别设置为3的
x
不同

更新您的更新

您完全可以将
function\u 1
变成一个类,并将
function\u 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')

可能与最初的重复,但它们没有嵌套。但是我试图在另一个脚本中运行完整的脚本(函数_1中的所有内容)。我能找到的最简单的方法是将整个脚本变成一个函数,导入脚本,然后在另一个脚本中调用函数。因此,为了澄清,1)我如何在另一个脚本中调用我的完整脚本(
test.py
),2)然后只调用
函数2
?我想如果我能做到#1,我就能做到#2。当你导入整个脚本时,它就会运行。您只需在全局命名空间中定义
function_2
,然后在脚本中的某个地方调用它。我已更新了我的答案以响应您的更新。我希望有帮助。