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
,然后在脚本中的某个地方调用它。我已更新了我的答案以响应您的更新。我希望有帮助。