我已经实现了这个算法:
def get_hot_pages(self, radius = 2):
if self.page == None or self.max_pages == None: return []
hot_pages = []
for page in xrange(self.page - radius, self.page + radius + 1):
if page < 0 or page >= self.max_pages : continue
hot_pages.append(page)
return hot_pages
但有些事情告诉我这可以更好地实现。有没有更像 Python 的方法来做到这一点?
请您参考如下方法:
通常的“技巧”是使用 max() 和 min() 来设置最小和最大页码:
def get_hot_pages(self, radius = 2):
if self.page is None or self.max_pages is None: return []
return range(max(self.page-radius, 0), min(self.page+radius+1, self.max_pages))
这种方法的主要优点是:
- 了解此标准程序的人会立即理解代码的作用(只需阅读一行)。无需阅读整个循环 block (其中包含过滤器测试)即可了解某些页面可能越界。
- 这是高效的:在每次迭代运行并过滤掉不正确的页码的循环中没有测试。关注效率通常是件好事(即使在这里无关紧要,在其他情况下可能很重要):解决方案同时简单、易读且相当常见高效(即,寻求效率实际上可以使代码更易读,因为它迫使人们隔离手头问题的本质)。
