[英]How can I import a variable from one function to another in Python?
[英]Python how can I import a variable from another file if it's in a function
我有 2 个 Python 文件: file1.py
和file2.py
。 我想从file1.py
中的file2.py
导入一个变量,但该变量位于 function 中。 以下是代码:
file1.py
class Ezber():
def ask():
value = "test string"
file2.py
from file1.py import *
print(value)
有没有可能这样做?
不,您无法访问该信息。 最大的原因是在导入时ask()
甚至还没有执行。 因此,尚未创建value
变量。
然而,更一般地说,除非您正在编写诸如调试器或其他诊断工具之类的东西,否则您不应该尝试检查另一个代码块的局部变量。 如果ask()
function 需要向另一个模块提供数据,它应该通过返回值或其他记录的方式发送信息。
不可能按照您的要求进行操作,并且与您的代码位于两个不同的文件中这一事实无关。 如果您尝试在声明 function 的同一文件中访问函数的局部变量,您仍然会遇到同样的问题。
不能这样做的原因是value
是 function ask
的局部变量。 这意味着每当调用 function ask
时,该变量将被压入堆栈,然后在ask
执行结束后将其删除。 因此,它在 function ask
的执行的 scope 之外不存在。 您可以通过考虑以下场景来理解为什么会发生这种情况:
def f(a):
value = a + 2
现在,除了调用 function f 时,变量value
的值还不清楚。 (f(2) 表示值 == 4,但 f(3) 表示值 == 5)。
但是,如果您有一个变量,其值不依赖于 function 的任何其他 arguments,您可以将其声明为全局变量(不推荐),或使其成为 ZA81259CEF8E959C6397ZD456E5 变量,如下所示:
class Ezber():
def ask():
# do something
pass
Ezber.ask.value = "test string"
print(Ezber.ask.value)
或者,如果您希望在 function 内部进行初始化,您可以执行以下操作:
class Ezber():
def ask():
# do something
Ezber.ask.value = "test string"
ezber = Ezber()
ezber.ask()
print(Ezber.ask.value)
但是正如您所看到的,您至少需要调用一次ask
才能访问value
。 (因为value
仅在执行ask
时才初始化)。
问题已解决。 我是这样做的:
class Ezber:
def ask(self):
value = "test"
return value
from file1 import *
print(Ezber().ask())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.