将变量值从一个文件导入到另一个文件,而无需在python中执行函数

将变量值从一个文件导入到另一个文件,而无需在python中执行函数,python,python-3.x,variables,Python,Python 3.x,Variables,我有一个脚本test.py,它包含两个函数sum()对两个值求和meth()调用sum()并将结果存储在变量c中。我的意图是先运行meth()并获取存储在变量c中的值,然后希望在另一个脚本demo.py中使用此值,而无需再次执行sum()。可能吗 test.py def sum(a,b): print("inside sum function") return a+b def meth(): c = sum(7,5) return c

我有一个脚本
test.py
,它包含两个函数
sum()
对两个值求和
meth()
调用
sum()
并将结果存储在变量
c
中。我的意图是先运行
meth()
并获取存储在变量
c
中的值,然后希望在另一个脚本
demo.py
中使用此值,而无需再次执行
sum()
。可能吗

test.py

def sum(a,b):
    print("inside sum function")
    return a+b
    
def meth():
    c = sum(7,5)
    return c
我尝试的解决方案是:

我通过在
demo.py
中调用meth()来获取变量
c
的值,但它也在执行
sum()
函数

demo.py

import test.py as tes
val = tes.meth()
输出:

=> Inside sum function
=> 12

我想先运行
test.py
并将值存储在变量
c
中,然后在
demo.py
中使用它,而不需要再次执行
sum()
函数。

每次调用
meth()
,它都会调用
sum()
。当该进程退出时,内存将被释放,求和结果将丢失,直到再次运行该函数


如果你想把结果存储在某个地方,那么你可以把它写进一个文件,例如,作为文本或某种二进制格式,甚至使用pickle,然后在以后的其他过程中加载它。您必须修改
meth()
以存储
sum()
的结果,然后让它在下次调用时检查该文件。这基本上就是缓存,如果您想在一个文件中存储两个数字的总和,有各种各样的模块可以让您进行高级缓存。

不要使用名为
test.py
的文件,因为
test
是一个内置模块

mytest.py
中调用
sum()
并将其存储在隐藏的模块变量中。调用
meth()时使用此变量

mytest.py

def sum(a,b):
    print("inside sum function")
    return a+b

_singleCallOfSumInMeth = sum(7,5)

def meth():
    return _singleCallOfSumInMeth
import mytest
print('After import, before calling meth()')
val = mytest.meth()
val = mytest.meth()
val = mytest.meth()
val = mytest.meth()
print(f'val={val}')
demo.py

def sum(a,b):
    print("inside sum function")
    return a+b

_singleCallOfSumInMeth = sum(7,5)

def meth():
    return _singleCallOfSumInMeth
import mytest
print('After import, before calling meth()')
val = mytest.meth()
val = mytest.meth()
val = mytest.meth()
val = mytest.meth()
print(f'val={val}')
输出

内部求和函数
导入之后,调用meth()之前

由于导入mytest
,所以打印了内部求和函数。它只打印一次,我们多次调用
meth()。所以调用
meth()

时只调用一次
sum()
,但是。。。这不管用吗
test.py
被正确执行,最终结果
12
现在存储在val中。它工作了,但meth()再次被执行,同时调用sum()。我只想在demo.py中使用变量值,而不调用任何函数。我可能会误解您,但如果不调用sum()也无法调用meth(),因为meth()本身调用sum()。但是调用
tes.meth()
val将存储12个,而无需再次调用meth()。很难回答您的问题,因为您的示例毫无意义;您创建的两个函数只不过是基本体。你应该详细说明你对它的使用,以及为什么你需要这种特殊的行为。这是一个XY问题,我们无法帮助您,因为我们不知道您真正想要做什么。在test.py中:
c=meth()
。在demo.py中:
来自测试导入c
。ekhumoro comment有一个解决方案,不需要使用临时文件写入和多次读取(效率非常低),我们不是说持久存储它不工作。已经试过了。它将调用sum函数again@rioV8这一评论实际上并没有回答所提出的问题;当您导入一个模块时,该模块中的所有代码都会得到处理,因此只需在
meth()
的输出中设置一个变量,就会导致
sum()
被重新调用,这是OP想要避免的特定事情。因此,结果必须在第一次计算后存储在某个地方,以避免第二次计算。文件适用于此定义函数和调用函数之间存在差异。通过调用
meth()
一次,将调用
sum()
once@Michael这个问题不清楚他们为什么需要分别运行这两个脚本。如前所述,该问题目前看起来像一个XY问题。可能是OP可以通过简单地重新构造他们的代码来回避这个问题(因此我建议的解决方案)again@AbhinandanMehandiratta您希望如何在不调用的情况下从
sum()
获取值?查看我的更新