2015-12-08 63 views
0

我正在为一个不规则网格上的区域生长写入一个函数:如果满足了某些要求,则从一个种子库中开始,找到相邻的库并将它们包含在返回的库索引集中。我想对于的要求是任意的,例如,“> 2”,“> = 2”,“== 2”,等。因此,语法是:将条件表达式作为函数参数传递

myregion = get_region(bin_coordinates, bin_values, seed_bin, '> 2') 

和邻近的区域中将返回其值大于2的垃圾箱。

基本上我正在寻找相同的功能在大熊猫图书馆,查询HDF存储时,以下是可能的:

store.select('dfq',where="A>0 or C>0") 

我当然可以写某种解析器使用的if/else语句将'> 2'翻译成代码,但我想知道是否有更优雅的方式?

+1

传中的λ(匿名函数),例如lambda x:x> 2。声明getregion为例如getregion(坐标,值,testfun),并通过例如调用它。 getregion(thesecoords,thesevalues,lambda x:x> 2),然后在getregion中使用例如。如果testfun(值)。然而,选择一个比testfun更好的名字来描述True的结果。 – barny

回答

1

使用lambda(匿名函数),例如lambda x:x> 2。声明getregion为例如getregion(坐标,值,testfun),并通过例如调用它。 getregion(thesecoords,thesevalues,lambda x:x> 2),然后在getregion中使用例如。如果testfun(值)。然而,选择一个比testfun更好的名字来描述True的结果。

另一种方法是定义一些“标准”评估函数并将其名称传递给getregion,例如,

def gt2(x): 
    return (x>2) 

声明getregion作为拉姆达例如:

def getregion(coordinates, values, testfun): 
    ... 
    if testfun(x): 
     ... 

并调用getregion这样的:

getregion(thesecoordinates, thesevalues, gt2) 

HTH 巴尼

+0

谢谢,这是一个很好的解决方案。不知道熊猫功能是如何实现的... – sulkeh

+0

他们已经实现了一个条件表达式求值器 - 在pytables.py的pandas源搜索中'where ='。我想详细的实现是在那里... – barny