【问题标题】:overriding default format when printing a list of datetime objects打印日期时间对象列表时覆盖默认格式
【发布时间】:2012-01-29 10:21:44
【问题描述】:

我有(在 Python 3 中):

print('event {} happened on these dates: {}'.format(event_name, date_list))

我的date_listdatetime.date 对象的列表。我想更改格式:

事件 A 发生在 [datetime.date(2011, 5, 31), datetime.date(2011, 6, 15)]

事件 A 发生在 [2011-05-31, 2011-06-15]

实现这一目标的最佳方法是什么?我希望我可以继续使用format() 函数,但我不知道如何。

【问题讨论】:

    标签: python printing formatting python-3.x


    【解决方案1】:

    打印列表会给出列表内项目的repr。 要获得项目的str 表示,您必须在项目上显式调用str

    In [6]: import datetime as dt
    
    In [7]: date_list = [dt.date(2011, 5, 31), dt.date(2011, 6, 15)]
    
    In [8]: print('[{}]'.format(', '.join(map(str,date_list))))
    [2011-05-31, 2011-06-15]
    

    【讨论】:

    • 知道了……虽然有很多重复的join 电话。将datetime.date 子类化以覆盖__repr__ 以便它简单地调用__str__ 是个好主意吗?
    • 实际上只有一个join 调用,虽然(可能)有很多str 调用。子类化datetime.date 所以__repr__ 返回str(self) 是可能的,但只有在你喜欢更简单的语法时才这样做,而不是为了速度。事实上,使用子类会更慢,因为每个__repr__ 调用都会进行str 调用。实际上,您将进行与上述一样多的str 调用,加上相同数量的__repr__ 调用的开销。无论如何,在您分析并确定主要瓶颈之前,不要担心速度。我怀疑它会在这里。
    • 对不起,我的意思是“重复”,意思是编写代码,而不是执行 :) 我有很多地方可以打印日期列表......所以对于我的目的,子类化还不错。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多