繁体   English   中英

Python 如果它在 function 中,我如何从另一个文件导入变量

[英]Python how can I import a variable from another file if it's in a function

我有 2 个 Python 文件: file1.pyfile2.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM