运行另一个python文件,更改其中一个变量
我想从另一个文件2运行一个文件1,同时更改它的一个变量。 大概是这样的: file1.py运行另一个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
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
可以进行一些重构。是的,我可以。我也相信这是最好的选择,但不太像蟒蛇。