使用 time.time() 更新 Python 全局时间变量不起作用
Posted
技术标签:
【中文标题】使用 time.time() 更新 Python 全局时间变量不起作用【英文标题】:Update Python global time variable using time.time() doesn't work 【发布时间】:2015-08-12 22:55:57 【问题描述】:由 time.time() 创建的变量不应该是不可变的,对吧?因此,我应该能够将其更改为其他内容。我在执行此操作时遇到了问题,而且 .sleep() 方法似乎没有帮助。
我将变量 e 设置为当前时间。我打印 e。然后我使用函数更新变量 e。然后我打印 e。两个打印的值应该不同,但它们不是。如何正确更新“全局”变量 e?
import time
e = time.time()
print ('e is %f') %e
time.sleep(1.12)
def uu(x):
#time.sleep(2)
x = time.time()
uu(e)
print ('%f') %e
无论我什么时候放延时,e的两个打印结果都是一模一样的。但是,我将 e 传递给函数,并且 e 不是不可变的,但它不会随着新的赋值语句而改变(即使在调用函数之前 [外部或内部] 存在时间延迟)。
我期待这样的输出
e is 1432940101.000643
1432940102.120643
第一个值与第二个值相差任意数量。
【问题讨论】:
e
是一个名字。它指的是time.time()
函数返回的float
对象。即使浮点数在 Python 中不是不可变的,您的代码也不会更改 e
。查看图片Python has "names" 并查看Facts and Myths about Python names and values。如果您阅读俄语,请参阅this answer。如果不清楚,请更新您的问题。
相关:In Python, why can a function modify some arguments as perceived by the caller, but not others?
@JFSebastian :从您的评论(在查看链接之前)看来,您是在说“uu(e)”在浮点数上调用该函数,而不是在浮点数上调用该函数,因此这不起作用。
【参考方案1】:
这是一个范围/命名空间问题。 e
被全局声明。即使我将e
传递 到函数uu
中,这也不会改变e
的全局定义值。
但是,如果我要在 uu
中放置一个 print 语句,那么带有该函数范围的 e
将具有不同的值。
【讨论】:
以上是关于使用 time.time() 更新 Python 全局时间变量不起作用的主要内容,如果未能解决你的问题,请参考以下文章