运行另一个python文件,更改其中一个变量

运行另一个python文件,更改其中一个变量,python,import,Python,Import,我想从另一个文件2运行一个文件1,同时更改它的一个变量。 大概是这样的: 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 # Pseudo-code: import file

我想从另一个文件2运行一个文件1,同时更改它的一个变量。 大概是这样的:

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
# Pseudo-code:
import file1 with (a = 0)  # runs file1, exporting all results, as if file1 had a = 0.
file2.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
# Pseudo-code:
import file1 with (a = 0)  # runs file1, exporting all results, as if file1 had a = 0.

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

如果必须从另一个模块更改全局变量,可以通过编写

import file1
file1.a = 0
请注意,
import
语句将导致执行整个
file1
,因此
file1
或其依赖项对
a
的任何模块级使用都将使用原始值(在本例中,
1


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

如果您必须更改另一个模块中的全局变量,可以通过编写

import file1
file1.a = 0
请注意,
import
语句将导致执行整个
file1
,因此
file1
或其依赖项对
a
的任何模块级使用都将使用原始值(在本例中,
1


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

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

def get_a(val=1):
    return val
然后在文件2中

import file1
file1.get_a(0)

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

def get_a(val=1):
    return val
然后在文件2中

import file1
file1.get_a(0)

这对
文件.a的其他用户没有帮助。我认为这只是file2执行
a=0
的一种复杂方式。这对
file.a
的其他用户没有帮助。我认为这只是file2执行
a=0
的一种复杂方式。我投了赞成票,但想强调的是,在
file1.py
s模块级别(例如,
foo=[None]*a
)或在您之前导入
file1
的任何其他模块使用
a
,都会导致此解决方案失败。只要我执行“导入file1”,file1以a=1运行,以a=1打印和导出所有结果,而不是a=0。@BernardoCosta是的,这是预期的行为<代码>文件1
将在导入时完整运行。如果需要以交互方式控制其状态,则需要将所有代码放在一个函数/类中。这是我想要避免的,因为我有2000行代码,其中包含数十个变量和函数。我正在考虑将变量“a”放入外部文本文件中。然后从文件1访问它。然后,从文件2中,将这个外部文件设为a=0,然后导入文件1。@BernardoCosta听起来你有很多重构要做。作为一个快速解决方案,您可以将整个脚本封装在一个
main
函数中,该函数要么接受
a
作为参数,要么继续将其作为全局参数使用。我投了赞成票,但想强调
a
file1.py
s模块级别的任何使用(例如,
foo=[None]*a
)或者由您之前导入的任何其他模块导入
file1
,将导致此解决方案失败。一旦我执行“导入file1”,file1将以a=1运行,并以a=1而不是以a=0打印和导出所有结果。@BernardoCosta是,这是预期的行为<代码>文件1将在导入时完整运行。如果需要以交互方式控制其状态,则需要将所有代码放在一个函数/类中。这是我想要避免的,因为我有2000行代码,其中包含数十个变量和函数。我正在考虑将变量“a”放入外部文本文件中。然后从文件1访问它。然后,从文件2中,将这个外部文件设为a=0,然后导入文件1。@BernardoCosta听起来你有很多重构要做。作为快速修复,您可以将整个脚本封装在
main
函数中,该函数可以接受
a
作为参数,也可以继续将其用作全局参数。您是否可以更改
file1.py
以读取配置,或者至少从可以首先导入的公共模块获取其变量?导入后更改
file1.a
只能在该点之后影响
a
的使用
file1.py
可以进行一些重构。是的,我可以。我也相信这是最好的选择,但不是那么pythonic。您是否可以更改
file1.py
以读取配置或至少从您可以首先导入的公共模块获取其变量?导入后更改
file1.a
只能在该点之后影响
a
的使用
file1.py
可以进行一些重构。是的,我可以。我也相信这是最好的选择,但不太像蟒蛇。