在哪里保存常见的 strftime 字符串,例如 ("%d/%m/%Y")
Where to hold common strftime strings like ("%d/%m/%Y")
在我的应用程序中,我发现自己经常使用 stftime,而且主要使用 2 种字符串格式 - ("%d/%m/%Y") 和 ("%H :%M")
我不想每次都写字符串,而是想将这些字符串存储在一些全局变量或其他东西中,这样我就可以在我的应用程序的一个地方定义格式字符串。
这样做的 pythonic 方式是什么?我应该使用全局字典、class、函数还是其他东西?
大概是这样的?
class TimeFormats():
def __init__(self):
self.date = "%d/%m/%Y"
self.time = "%H:%M"
或者像这样?
def hourFormat(item):
return item.strftime("%H:%M")
感谢帮助
您可以使用 functools.partial
来生成一个包含以下格式的函数:
import time,functools
time_dhm = functools.partial(time.strftime,"%d/%m/%Y")
time_hm = functools.partial(time.strftime,"%H:%M")
print(time_dhm(time.localtime()))
print(time_hm(time.localtime()))
结果:
18/01/2017
10:38
您只需将 time
结构传递给新函数即可。该函数保存格式。
注意:您可以对 lambda
做同样的事情:
time_dhm = lambda t : time.strftime("%d/%m/%Y",t)
我认为最好创建一个自定义函数来实现这一点。例如:
def datetime_to_str(datetime_obj):
return datetime_obj.strftime("%d/%m/%Y")
样本运行:
>>> from datetime import datetime
>>> datetime_to_str(datetime(1990, 3, 12))
'12/03/1990'
函数名一目了然,对开发者更友好。每次需要将 datetime
转换为 str
时,他们就会知道需要调用哪个函数。如果您想在整个应用程序中更改格式;会有单点变化。
您可以创建自己的设置模块,就像 django 那样。
settings.py:
# locally customisable values go in here
DATE_FORMAT = "%d/%m/%Y"
TIME_FORMAT = "%H:%M"
# etc.
# note this is Python code, so it's possible to derive default values by
# interrogating the external system, rather than just assigning names to constants.
# you can also define short helper functions in here, though some would
# insist that they should go in a separate my_utilities.py module.
# from moinuddin's answer
def datetime_to_str(datetime_obj):
return datetime_obj.strftime(DATE_FORMAT)
别处
from settings import DATE_FORMAT
...
time.strftime( DATE_FORMAT, ...)
或
import settings
...
time.strftime( settings.DATE_FORMAT, ...)
在我的应用程序中,我发现自己经常使用 stftime,而且主要使用 2 种字符串格式 - ("%d/%m/%Y") 和 ("%H :%M")
我不想每次都写字符串,而是想将这些字符串存储在一些全局变量或其他东西中,这样我就可以在我的应用程序的一个地方定义格式字符串。
这样做的 pythonic 方式是什么?我应该使用全局字典、class、函数还是其他东西?
大概是这样的?
class TimeFormats():
def __init__(self):
self.date = "%d/%m/%Y"
self.time = "%H:%M"
或者像这样?
def hourFormat(item):
return item.strftime("%H:%M")
感谢帮助
您可以使用 functools.partial
来生成一个包含以下格式的函数:
import time,functools
time_dhm = functools.partial(time.strftime,"%d/%m/%Y")
time_hm = functools.partial(time.strftime,"%H:%M")
print(time_dhm(time.localtime()))
print(time_hm(time.localtime()))
结果:
18/01/2017
10:38
您只需将 time
结构传递给新函数即可。该函数保存格式。
注意:您可以对 lambda
做同样的事情:
time_dhm = lambda t : time.strftime("%d/%m/%Y",t)
我认为最好创建一个自定义函数来实现这一点。例如:
def datetime_to_str(datetime_obj):
return datetime_obj.strftime("%d/%m/%Y")
样本运行:
>>> from datetime import datetime
>>> datetime_to_str(datetime(1990, 3, 12))
'12/03/1990'
函数名一目了然,对开发者更友好。每次需要将 datetime
转换为 str
时,他们就会知道需要调用哪个函数。如果您想在整个应用程序中更改格式;会有单点变化。
您可以创建自己的设置模块,就像 django 那样。
settings.py:
# locally customisable values go in here
DATE_FORMAT = "%d/%m/%Y"
TIME_FORMAT = "%H:%M"
# etc.
# note this is Python code, so it's possible to derive default values by
# interrogating the external system, rather than just assigning names to constants.
# you can also define short helper functions in here, though some would
# insist that they should go in a separate my_utilities.py module.
# from moinuddin's answer
def datetime_to_str(datetime_obj):
return datetime_obj.strftime(DATE_FORMAT)
别处
from settings import DATE_FORMAT
...
time.strftime( DATE_FORMAT, ...)
或
import settings
...
time.strftime( settings.DATE_FORMAT, ...)