让我们说我有一个脚本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
设为一个类(它需要一个参数)。我怎样才能解决这个问题?我可以以某种方式使用_main_
来代替function_1
吗?然后可以仅导入function_2
吗?
答案 0 :(得分:2)
嵌套函数function_2
是外部函数的 local 命名空间中的对象。 function_1
不在运行时,它甚至不作为函数存在。
通常,嵌套函数要么对外部函数执行 private 计算,要么以某种形式返回。在后一种情况下,您可以运行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')