我需要帮助理解Python中的概念。
我想在实际运行导入/打印代码的时间点打印在python循环内运行的变量的特定值。
“当前”值是指实际运行导入和打印代码时变量的(单个)值。
我需要做的实际代码/原因有点抽象,如果我使用确切的代码可能会使事情复杂化,所以为了简单和清晰起见,我在下面提供了一个简化的例子。
我有两个文件:
file1.py
import datetime
while True:
x = datetime.datetime.now()
print x
运行时打印并滚动当前日期/时间,如下所示:
2017-03-08 11:34:22.363000
2017-03-08 11:34:22.363000
2017-03-08 11:34:22.452000
2017-03-08 11:34:22.452000
2017-03-08 11:34:22.782000
2017-03-08 11:34:22.782000
2017-03-08 11:34:22.970000
....
我希望能够运行另一个python文件/进程,在导入和打印代码实际运行的特定时间导入并打印x的特定值。
例如,如果来自file2.py的导入/打印代码在2017-03-08 11:34:22.782000执行,则应打印以下内容...
2017-03-08 11:34:22.782000
Process finished with exit code 1
我遇到的问题是,当我运行下面的import和print语句时,日期/时间打印在一个滚动列表中,它似乎反映了file1.py正在做什么,并且没有返回特定的时间点值正如我所期望的那样......
file2.py
import file1
print file1.x
简而言之,我的问题是,如何从重复过程导入和打印变量的特定时间点值,而不是导入和打印完整的重复过程。
我希望这是有道理的,请原谅我,如果我在这里遗漏了一些东西,但我一直试图找到解决方案而没有成功,所以我想看看我能不能在这里得到任何指示......
非常感谢任何帮助。感谢...
答案 0 :(得分:1)
如果您希望访问file1.x
的行为计算x
的值,就好像它是property
一样,您可以解决方法以形成包含属性的模块对象:
import types, sys, datetime
class UpdateDetector(types.ModuleType):
@property
def x(self):
x = datetime.datetime.now()
return x
self = UpdateDetector(__name__)
sys.modules[__name__] = self
请注意,如果这是您正在寻找的那种行为,那么它就会变得非常容易(并且对于那些不期望这个的其他人来说显着减少烦恼)不会覆盖模块而只是使用具有属性的对象而不是模块对象。或者更好,只需使用(getter)函数,如datetime.datetime.now()
;)