【问题标题】:How to access a dynamic variable of a Python script from another Python script?如何从另一个 Python 脚本访问 Python 脚本的动态变量?
【发布时间】:2021-12-20 23:28:57
【问题描述】:

所以有两个脚本:script1.pyscript2.pyscript1.py 有一个变量x,它存储在运行时从文件中读取的字符串。在script2.py 中,我导入script1.py,然后使用以下命令运行script1.pyscript1.main()。然后我在script1.py 中运行一个特定的函数,负责读取相关文件。

您可能想知道为什么我不首先运行那个特定的函数,而是运行整个脚本。那是因为script1.py 做了很多其他事情,script2.py 每次运行时都需要这样做。

script1.pyscript2.py 运行时,我希望能够读取存储在x 中的内容。我目前正在做的基本上是两次运行script1.py 的一部分。我想知道是否可以在不执行以下操作的情况下访问变量x

#script1

def read_file():
    f = open('file_path.txt')
    string = f.read()
    return string

def main():
    x = read_file()

if __name__ == '__main__':
    main()

还有script2.py:

#script2

import script1
from script1 import *

def main():
    script1.main()
    x = read_file()
    print(x)

if __name__ == '__main__':
    main()

所以本质上我想知道这种事情通常应该怎么做。是否可以在不必再次运行read_file() 的情况下获得x 的值?执行script1.main() 时,x 的值存储在哪里,如何访问它?不确定我应该使用import script1 还是应该使用from script1 import * 来实现这一点。

【问题讨论】:

  • script1.main返回x?
  • 如果有的话,我更喜欢另一种选择。如果我想访问多个对象怎么办?这可能吗?
  • 好吧,你可以返回多个对象...
  • 你的意思是作为一个可迭代的?
  • 像往常一样:return x,y,z 这是一个元组。

标签: python import python-import


【解决方案1】:

由于xscript1.main 函数中的局部变量,它不能从外部访问(既不能从script2 也不能从script1)。实际上,对象会在script1.main 完成后被丢弃。 如果要重复使用,则需要将其存储在其他地方。

快速解决方法是将变量 x 设为全局变量。然后script2可以将其用作script1.x

# script1.py
def read_file():
    return "foo bar"

def main():
    global x
    x = read_file()

if __name__ == '__main__':
    main()

# script2
import script1

def main():
    script1.main()
    #x = read_file()
    print(script1.x)

if __name__ == '__main__':
    main()

如果您不想使用global 语法,另一种方法是在script1.py 中定义一个可变变量,并让它存储您要重用的变量。一种可能性是使用class。在这里,我使用class 作为可变存储。如果您不喜欢它,其他可变对象(例如 dict)也可以使用。

# script1.py
class data:
    x = None

def read_file():
    return "foo bar"

def main():
    data.x = read_file()

if __name__ == '__main__':
    main()

# script2
import script1

def main():
    script1.main()
    #x = read_file()
    print(script1.data.x)

if __name__ == '__main__':
    main()

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2022-07-02
    • 2019-03-03
    相关资源
    最近更新 更多