2012-01-29 69 views
1

我(在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()函数,但我不知道如何。

回答

5

打印列表给出列表中的项目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] 
+0

了... ...这是一个很大的重复性'join'虽然调用。子类'datetime.date'覆盖'__repr__'是否是一个好主意,因此它简单地调用'__str__'? – max 2012-01-29 11:43:22

+0

它实际上只有一个'join'调用,尽管(可能)有很多'str'调用。对'datetime.date'进行子类化,所以'__repr__'返回'str(self)'是可能的,但只有当你喜欢简单的语法而不是速度时才可以。实际上,使用子类会比较慢,因为每个'__repr__'调用都会调用'str'。实际上,你可以做出和上面一样多的'str'调用,加上相同数目'__repr__'调用的开销。无论如何,除非您已经确定了主要瓶颈,否则不必担心速度问题。我怀疑它会在这里。 – unutbu 2012-01-29 12:49:28

+0

对不起,我的意思是编写代码意义上的“重复性”,而不是执行:)我有很多地方打印日期列表......因此,对我而言,这似乎并不坏子类。谢谢! – max 2012-01-29 21:09:55