Python:试图避免为time_passed函数使用全局变量

时间:2016-06-23 17:01:20

标签: python python-2.7 time global-variables

我是Python的新手,我正在使用方法time_passed()来跟踪已经过了多长时间。

我不想使用全局变量。有没有办法编写这个方法,以便它不会采用任何参数,而且它不使用全局变量?

import time

start_time=time.time()    
def time_passed():
    return time.time() - start_time

处理此问题的pythonic方法是什么?

3 个答案:

答案 0 :(得分:2)

Python中的静态变量等效于Javascript,其中在特定对象命名空间下分配变量使其在分配的方法范围之外的持久性。就像在Javascript中一样,Python函数是对象,可以分配成员变量。

因此,对于此示例,您可以编写

import time

def timestamp():
    timestamp.start_time=time.time()
    return time.time() - timestamp.start_time

编辑:现在看一下代码,你显然想要初始化一次,这个函数将重新初始化每次调用的start_time。我在Python方面不是很有经验,但这可能有效

import time

def timestamp():
    if timestamp.start_time is None:
        timestamp.start_time=time.time()
    return time.time() - timestamp.start_time

答案 1 :(得分:1)

您可以编写一个存储开始时间的简单类:

import time

class Timer:
    def __init__(self):
        self.start = time.time()

    def __call__(self):
        return time.time() - self.start

然后使用它:

time_passed = Timer()
print time_passed()

这样您也可以轻松使用多个计时器。

答案 2 :(得分:1)

生成器应该用于需要封装状态的函数。

import time


def time_passed_generator():
    start_time = time.time()
    while True:
        yield time.time() - start_time

time_passed = time_passed_generator()

#start

next(time_passed) # should be about 0.0

# ... later get the time passed

print(next(time_passed))