我有一个文件,说“c.py”和导入的文件“b.py”,它在代码后面的“c.py”中使用
import b.py
def scatter_plot(file0,camp):
# enter complete path of file
file1 = ("/home/data/camp0" + str(camp) + "/not_detrended/ktwo"+ str(file0)+ "c0"+ str(camp)+ "_lpd_LC.txt")
file2 = file1.replace("not_","")
file3 = open('/home/parameters1.txt','r')
y = np.genfromtxt(file1)
x = np.genfromtxt(file2)
text = file3.read()
specs = text.split()
#Input the parameters
i = specs.index(str(file0))
t0 = float(specs[i + 2])
period = float(specs[i + 1])
.......
在主文件c.py中,我读取文本文件“file3”并获取上面的变量(t0和句点)。我已经导入了一个文件“b.py”,它也使用了这些变量,但为了使代码工作,我必须在运行c.py之前在文件b.py中定义和修复这些变量,我不能使用它们来自“ file3。我想通过调用函数scatter_plot()来运行主文件“c.py”,并希望变量也在导入的文件“b.py”中定义。只需当我调用我想要的函数时在导入的文件中也使用这些变量。这可能吗?
par = [tduration, depth, t0, period]
firstmodel = traptransitover.traptransitover( time, par)
newmodel = traptransitover.traptransitover( time, result)
上面的代码是几行“b.py”。如果我没有在“b.py”中定义变量t0和句点并在运行“c.py”之前修复它们就不行了。但是,如果我这样做,那么就不会使用“file3”中的读取变量。在运行代码之前,我无法每次定义。 对不起如果我无法解释我的问题,你需要更清晰,请告诉我。谢谢。
答案 0 :(得分:0)
如果我理解你的话
最好的方法是重写模块a.py,b.py和c.py,这样thay就可以在不知道这些变量的情况下导入。所有使用变量的代码都必须包含在接受(t0和period)作为参数的函数或类中,并且在" c.py"之前不应调用它们。不解析文件。
另一种方法是创建另一个模块(例如" config.py")来存储变量,并将这些模块包含在所有其他模块中。在初始化配置文件时,您将无法导入其他模块。
config.py
t0 = None
period = None
def initialize_t_and_period( file ):
global t0
global period
#here code for initialization t0 and period from scatter_plot
模块b.py
import config
do_something_with( config.t0 )
...
模块c.py
import config
def scatter_plot( file0, camp ):
config.initialize_t_and_period( file0 )
#after initialization you can safety import modules
import a
import b
如果file始终相同(即预定义),则可以在config.py中读取它。尽管在程序运行期间配置导入两次,但它只执行一次。