# 8.1 viewmodel意义的体现与filter函数的巧妙应用

在搜索书籍页面里，需要将每一条结果的作者，出版社，价格在一行展示，并以”/“分割。由于这三个属性还有可能为空，所以在html模板里处理不太方便。我们选择将这些数据处理的工作放在viewmodel中。

简单粗暴一点的方法是写一段 if-else 代码，将这三个属性以及可能为空的情况全都穷举出来，但是python给我们提供了更优雅的解决方式，就是使用filter过滤器+lambda表达式

```python
class BookViewModel:

    def __init__(self, book):
        self.title = book['title'],
        self.publisher = book['publisher'],
        self.pages = book['pages'],
        self.author = '、'.join(book['author']),
        self.price = book['price'],
        self.summary = book['summary'],
        self.image = book['image']

    # @property注解可以让我们把一个方法当做一个属性来使用
    @property
    def intro(self):
        intros = filter(lambda x: True if x else False,
                        [self.author[0], self.publisher[0], self.price[0]])

        return ' / '.join(intros)
```
