Python 如何设置一个随着系统时间变化的动态变量?
想取当前时间,但取时间那一坨内容太长了,复制的到处都是,封装一个方法行是行,但感觉有点啰嗦
我是想能不能通过一个动态变量 a 来获取当前时间,能做到吗?直接赋值,取的就是变量生成那一瞬间的固定时间了,不是我想要的,我想要的是 print(a) 就能获取当前时间
>>> a = time.strftime('%Y-%m-%d %H:%M:%S')
>>> a
'2018-04-26 14:16:17'
>>> a
'2018-04-26 14:16:17'
>>> a
'2018-04-26 14:16:17'
>>>
==================
>>> def a():
... return time.strftime('%Y-%m-%d %H:%M:%S')
...
>>> a()
'2018-04-26 14:19:36'
>>> a()
'2018-04-26 14:19:39'
>>> a()
'2018-04-26 14:19:41'
>>>
Python 如何设置一个随着系统时间变化的动态变量?
既然要 class 的 repr 为函数的结果,定义 metaclass 的 reprpython 3<br>class _a(type):<br> def __repr__(self):<br> return time.strftime('%Y-%m-%d %H:%M:%S')<br><br>class a(object, metaclass = _a):<br> pass<br><br>print(a)<br>
在Python里,要搞一个随着系统时间动态变化的变量,最直接的办法就是用一个函数或者一个property装饰器,每次访问的时候都重新获取当前时间。
比如,你可以定义一个类,然后用@property装饰器来包装一个方法。这样,每次你访问这个属性的时候,它都会调用datetime.now()来获取最新的时间。
from datetime import datetime
class DynamicTime:
@property
def current_time(self):
"""每次访问都返回最新的系统时间"""
return datetime.now()
# 使用示例
time_obj = DynamicTime()
print(time_obj.current_time) # 输出类似:2023-10-27 10:30:15.123456
# 稍等一会儿再访问
print(time_obj.current_time) # 输出一个更新的时间
如果你不想要类,只想搞个简单的变量,那可以写个函数:
from datetime import datetime
def get_current_time():
return datetime.now()
# 每次调用函数获取最新时间
print(get_current_time())
关键点在于,不要把时间点存到一个静态变量里,而是要通过一个调用(函数或property)来实时获取。这样它才是真正“动态”的。
简单说,用property或者函数来包装对datetime.now()的调用。
/惊讶
python<br>class A(object):<br> <br> def a(self):<br> return time.strftime('%Y-%m-%d %H:%M:%S')<br>
print(A().a)
比直接定义方法还麻烦啊
你是嫌定义麻烦还是调用麻烦?定义麻烦的话:
a = lambda:time.strftime(’%Y-%m-%d %H:%M:%S’)
应该没有更简单的办法了。调用麻烦的话,就一楼。
你在提出这个需求的时候,有没有想过这种动态变量,假如有的话,底层要以什么原理来实现?
每隔一个毫秒,系统自动更新一次这个变量所在内存里的值吗?
还是平时不变,只在你取值的时候更新一下?
这后者不就是函数么,还是说你只是想要个省略括号的语法糖?
python<br>>>> a = lambda :time.strftime('%Y-%m-%d %H:%M:%S')<br>>>> a()<br>'2018-04-26 15:32:20'<br>>>> a()<br>'2018-04-26 15:32:23'<br>>>><br>
创建动态变量
locals()[变量名] = 变量值
import time
now=type(‘now’, (), {‘repr’: lambda s: str(time.time())})()
使用:
In [105]: now
Out[105]: 1524728419.898981
In [106]: now
Out[106]: 1524728420.5150971
In [107]: now
Out[107]: 1524728421.219552
In [108]: now
Out[108]: 1524728425.09097

