【发布时间】:2014-09-16 22:27:45
【问题描述】:
我是 Python 列表理解的忠实粉丝,我认为它实际上比常规迭代更容易阅读。
我正在编写一个构造函数,它在**kwargs 中具有可选参数,可用于设置类的属性,我想将其写为列表理解,但拥有一个不包含的列表似乎毫无意义'实际上什么都不做。考虑一下:
class Book(object):
attrs = ('id', 'title', 'authors',...)
def __init__(self, *args, **kwargs):
[setattr(self, attr, kwargs.get(attr)
for attr in O.attrs if kwargs.get(attr)]
虽然语法看起来不错,但我认为这是不好的编码,因为您创建了一个列表
[None, None, None...]
那只是坐在那里。是的,我知道它是在构造函数运行后收集的,但我仍然不喜欢它。如果我读了某人的代码,我会不为所动。
是否有更好的方法来完成与列表推导一样干净但不会创建无用对象的迭代
编辑:
响应使用循环
class Book(object):
attrs = ('id', 'title', 'authors',...)
def __init__(self, *args, **kwargs):
for attr in attrs:
if kwargs.get(attr):
setattr(self, attr, kwargs.get(attr)
这就是你们的意思吗?如果没有,还有什么更好的写法?
【问题讨论】:
-
只需使用常规的
for循环即可。 -
要检查密钥是否在字典中,请使用
if attr in kwargs而不是if kwargs.get(attr)
标签: python list iteration list-comprehension