我想使用像过滤器一样传递给我的函数**kwargs
的参数。也就是说,只有当对象n
的属性为== v
时,该元素才应附加到列表中。
我目前的解决方案是这样的。有没有更好的方法来做到这一点?对我来说看起来很漂亮。
def filter_nodes(self, **kwargs):
r = []
for n in self.pcode:
for k,v in kwargs.iteritems():
if getattr(n,k) == v:
sign = True
else:
sign = False
if sign is True:
r.append(n)
return r
更新
这就是现在的功能。感谢所有有用的评论。
def filter_nodes(self, **kwargs):
bib = {'eq': '==','gt': '>','st': '<','geqt': '>=','seqt': '<=', 'neq':'!=' }
r = []
for n in d:
if all(eval('%s%s%s' % (getattr(n,k),bib[v[1]], v[0])) for k,v in kwargs.iteritems()):
r.append(n)
return r
答案 0 :(得分:3)
我相信这将具有相同的功能:
def filter_nodes(self, **kwargs):
return [n for n in self.pcode
if all(getattr(n, k) == v for k, v in kwargs.iteritems())]
UPDATE :实际上,它不会,它将要求所有属性与kwargs中找到的值相等,而在您的代码段中,最后一个键/值对的kwargs将决定如果可以添加或不添加。也许您应该指定允许添加的确切条件。