【问题标题】:Run another python file, changing one of its variables运行另一个 python 文件,更改其中一个变量
【发布时间】:2020-03-17 17:01:44
【问题描述】:

我想从另一个 file2 运行一个 file1,同时更改其中一个变量。 像这样的:

file1.py

a = 1
b = 1
c = 1
# Then:
# Countless functions depending on a, b, c, etc., depending on each other in complicated ways.
# Results from these functions are plotted and exported

file2.py

# Pseudo-code:
import file1 with (a = 0)  # runs file1, exporting all results, as if file1 had a = 0.

考虑到我在 file1.py 中有太多变量、复杂的函数和依赖项,最简单的方法是什么?

【问题讨论】:

  • 您可以更改file1.py 以读取配置或至少从您可以先导入的通用模块中获取其变量吗?导入后更改file1.a 只能影响在那之后使用afile1.py 可以使用一些重构。
  • 是的,我可以。我也相信这是最好的选择,但不是那么 Pythonic。

标签: python import


【解决方案1】:

如果你必须从另一个模块改变一个全局变量,你可以这样写

import file1
file1.a = 0

请注意,import 语句将导致整个file1 的执行,因此file1 或其依赖项对a 的任何模块级使用将使用原始值(在这种情况下, 1)。

如果您需要控制file1 的内容何时执行,您应该将其内容移动到函数或类中。您的示例中的变量 a 似乎很可能会更好地表示为 file1 定义的函数的参数。

【讨论】:

  • 我投了赞成票,但想强调在 file1.py 的模块级别(例如 foo = [None] * a)或在您之前导入 file1 的任何其他模块对 a 的任何使用,将导致此解决方案失败。
  • 一旦我执行“import file1”,file1 就会以 a = 1 运行,使用 a = 1 而不是 a = 0 绘制和导出所有结果。
  • @BernardoCosta 是的,这是预期的行为。 file1 将在导入时完整运行。如果您需要以交互方式控制其状态,则需要将所有代码放在一个函数/类中。
  • 这是我想要避免的,因为我有 2000 行代码,其中包含几十个变量和函数。我正在考虑将变量“a”放在外部文本文件中。然后从file1访问它。然后,从 file2 中,使这个外部 a=0,并导入 file1。
  • @BernardoCosta 听起来你有很多重构工作要做​​。作为一个快速修复,您可以将整个脚本包装在一个 main 函数中,该函数接受 a 作为参数或继续将其用作全局参数。
【解决方案2】:

将变量包装为函数,并将值作为参数传递。

def get_a(val=1):
    return val

然后在文件2中

import file1
file1.get_a(0)

【讨论】:

  • 这对file.a 的其他用户没有帮助。我认为这只是file2做a = 0的一种复杂方式。
猜你喜欢
  • 2018-05-19
  • 2019-07-30
  • 2021-05-09
  • 2018-05-15
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
相关资源
最近更新 更多