如何在返回对象时使用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
]
}
答案 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
}