如何创建动态变量?

时间:2017-06-18 12:15:08

标签: python callable

我想创建一个变量,每次查询时都会返回不同的值。

这是我到目前为止所做的:

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()函数在那一刻返回什么)。

3 个答案:

答案 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)