Lar*_*gas 0 python optimization keyword-argument
**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
Run Code Online (Sandbox Code Playgroud)
更新
这就是函数现在的样子。感谢所有有用的评论。
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
Run Code Online (Sandbox Code Playgroud)
我相信这将具有相同的功能:
def filter_nodes(self, **kwargs):
return [n for n in self.pcode
if all(getattr(n, k) == v for k, v in kwargs.iteritems())]
Run Code Online (Sandbox Code Playgroud)
更新:实际上,它不会,它将要求所有属性与 kwargs 中找到的值相等,而在您的代码片段中,kwargs 的最后一个键/值对将决定是否可以添加 n 。也许您应该指定允许添加它的确切条件。