当前位置:  开发笔记 > 编程语言 > 正文

重构此Python代码以迭代容器

如何解决《重构此Python代码以迭代容器》经验,为你挑选了2个好方法。

当然有更好的方法来做到这一点?

results = []
if not queryset is None:
    for obj in queryset:
        results.append((getattr(obj,field.attname),obj.pk))

问题是有时queryset是None,当我尝试迭代它时会导致异常.在这种情况下,我只想将结果设置为空列表.这段代码来自Django视图,但我认为不重要 - 这似乎是一个更普遍的Python问题.

编辑:我发现我的代码是将一个空的查询集转换为"无"而不是返回一个空列表.能够假设查询集始终是可迭代的,通过允许删除"if"语句来简化代码.下面的答案可能对有相同问题的其他人有用,但无法修改其代码以保证查询集不是"无".



1> jfs..:
results = [(getattr(obj, field.attname), obj.pk) for obj in queryset or []]



2> Hannes Ovrén..:

怎么样

for obj in (queryset or []):
    # Do your stuff

它与JF Sebastians的建议相同,只是没有作为列表理解实现.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有