在另一个函数中导入一个函数
Importing a function inside another function
假设我有一个脚本,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
我基本上只是收到一条错误消息 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')
假设我有一个脚本,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
我基本上只是收到一条错误消息 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')