python:返回对象时如何使用

时间:2016-12-06 22:27:52

标签: python-2.7

如何在返回对象时使用if语句?

代码:

def to_json(self):
    return {
        'some_key': some_data,
        'some_details': [
            if self.__some_details: # if it is not None
                detail.to_json() for detail in self.__details
        ]
    }

2 个答案:

答案 0 :(得分:1)

Python的if / else版本可以在表达式中使用,而不是作为语句使用。这有点奇怪,因为语法是value1 if condition else value2。在你的字典中,这将是:

def to_json(self):
    return {
        'some_key': some_data,
        'some_details': [detail.to_json() for detail in self.__details]
                        if self.__some_details
                        else [] # or else None?
    }

请注意,条件位于构成列表推导的括号之外。没有办法按照你的方式使整个列表理解成为条件。您可以对每个值(例如[x for x in xs if some_condition(x)])设置条件,但该语法要求xs存在并且即使条件为假也可以迭代,如果条件不依赖于它,则可能会浪费x值。if上面使用的else / None语法短路,因此如果条件为假,则不会评估列表推导。

如果条件不满足,你想要你的代码做什么并不完全清楚,所以我猜测空列表是列表理解的替代方法。您还可以使用'some_details'或您想要的任何其他值。但是,如果您不希望在不满足条件时将result = {'some_key': somedata} if self.__some_details: result['some_details'] = [detail.to_json() for detail in self.__details] return result 键添加到字典中,则此方法将不起作用。在这种情况下,您需要使用多个语句来构建字典:

<script type="text/javascript">

                    jQuery(function($){

                            function fetchBlogPosts(){

                                 $.post( ajaxUrl, {'action' : 'post_blog', 
                                                   'security' :'<?php echo wp_create_nonce('load_more_posts'); ?>' }, 
                                 function(response){

                                 });


                             }

                             $('.load-more').click(function(){
                                 fetchBlogPosts();
                             });

                        });

</script>

答案 1 :(得分:0)

以下是否合适?

def to_json(self):
    if self.__some_details:
        some_details = [ detail.to_json() for detail in self.__details ]
    else:
        some_details = []
    return {
        'some_key': some_data,
        'some_details': some_details
    }