**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