我正在使用python类生成日历日常视图中使用的HTML表。要生成表格,我递归地调用我的函数,直到它达到所需的结束。我看起来像这样:Python递归字符串连接
# By default time=[0][0] and end_time=[0][24]
---------------------------------------------
def makeRows(self, time, end_time): # time/end_time = [min][hour]
row = ['<tr><td>']
if time[1] == end_time[1]: # Base case
# String format
if time[0] == 0:
row.append('%s:00' % time[1])
else:
row.append('%s:%s' % (time[1], time[0]))
row.append('</td></tr>')
return format_html(''.join(row))
else: # Recursive case
if time[0] == 0 and time[1] == 0: # First row
row.append('0:00')
row.append('</td><td rowspan="97"><div class="day_event_container"></div></td></tr>')
else:
# String format
if time[0] == 0:
row.append('%s:00' % time[1])
else:
row.append('%s:%s' % (time[1], time[0]))
row.append('</td></tr>')
return format_html(''.join(row)+self.makeRows(self.increaseTime(time), end_time))
def increaseTime(self, time):
hour = time[1]
minute = time[0]
if minute == 0:
minute+= 30
else:
hour += 1
minute = 0
return [minute, hour]
最近,我改变了我的所有字符串连接从+=
到''.join()
但唯一的'天真'串联是在我的递归调用。
的功能通常被称为48倍,从0:00
->
24:00
生成行是“”天真'串联在我的递归调用真的有那么昂贵的48函数调用?
如果它真的非常昂贵,我会如何取代我的'天真'连接?
我试着做
return format_html(''.join(row).join(self.makeRows(self.increaseTime(time), end_time)))
但抛出Exception Type: MemoryError
和我猜它只是溢出堆或堆栈或任何其存储。
最后,我对Python非常陌生,我99%确定这与pythonic的做事方式非常遥远。那么是否有更多pythonic的方式来生成从0:00
到24:00
的每日日历视图?
你能把完整的代码? 'self.increaseTime()'做了什么,最初是什么'time'和'endtime'? –
@AnandSKumar编辑该问题以获得更好的理解。 inceaseTime只增加了30分钟的时间 –
另一个问题是,使用'join'导致'MemoryError'?而使用+不会导致它? –