我想创建一个变量,每次查询时都会返回不同的值。
这是我到目前为止所做的:
import datetime
def getVal():
return datetime.datetime.now().time()
TMP_VAR = lambda: getVal()
for a in range(0,10):
print TMP_VAR()
这有效,我得到了:
13:06:41.799504
13:06:41.800129
13:06:41.800139
13:06:41.800145
13:06:41.800161
13:06:41.800167
13:06:41.800173
13:06:41.800179
13:06:41.800184
13:06:41.800190
但是,TMP_VAR
现在是一个功能。有没有办法让这种方式以下列方式运作?
print TMP_VAR
有效地,将可调用函数链接到变量。因此,每当我将TMP_VAR
传递给另一个函数时,作为参数,它总是重新计算并且恰好保持一个新值(无论getVal()
函数在那一刻返回什么)。
答案 0 :(得分:2)
我认为这不是一个好主意,建议你保留一个功能,因为它更明显和可读。
但如果你真的需要这个 - 有使用像
这样的类的解决方法import datetime
class Timer(object):
def __call__(self):
return datetime.datetime.now().time()
def __str__(self):
return str(self())
TMP_VAR = Timer()
现在我们可以写
for a in range(0, 10):
print TMP_VAR
或
for a in range(0, 10):
print TMP_VAR()
并获得相同的输出。
答案 1 :(得分:2)
import datetime
class dynamic_var():
def __init__(self):
pass
def getVal(self):
return datetime.datetime.now().time()
def __repr__(self):
return str(self.getVal())
def __str__(self):
return str(self.getVal())
def main():
tmp_var = dynamic_var()
for a in range(0, 50):
print(tmp_var)
if __name__ == "__main__":
main()
答案 2 :(得分:1)
如果您不介意首先要创建类TMP
的实例A
,那么您可以使用property
获得该行为:
from datetime import datetime
class A:
@property
def VAR(self):
return datetime.now().time()
TMP = A()
print(TMP.VAR)