我是Python的新手,我正在使用方法time_passed()来跟踪已经过了多长时间。
我不想使用全局变量。有没有办法编写这个方法,以便它不会采用任何参数,而且它不使用全局变量?
import time
start_time=time.time()
def time_passed():
return time.time() - start_time
处理此问题的pythonic方法是什么?
答案 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))