**kwargs
我想像过滤器一样使用传递给我的函数的参数。也就是说,只有当对象的属性n
是== v
元素时,才应该将其附加到列表中。
我目前的解决方案看起来像这样。有没有更好的方法来做到这一点?对我来说看起来很hacky。
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