假设我有以下代码,它接受一个距离函数和两个点,并吐出距离:
def distance(dist_fun, p1, p2): ## SOME ASSERTION HERE on dist_fun ## ## Suppose, just for this post, we've already checked p1 and p2 are ## n-tuples of integers. assert (len(p1) == len(p2)), "Coordinates are different dimensions." dist = dist_fun(p1, p2) assert (dist>=0), "Negative distance is not possible." return dist def euclid(p1, p2): #as an example dist function. return pow(reduce(lambda x,y: x+y, [pow((p1[i] - p2[i]), 2) for i in range(len(p1))]),0.5)
我希望能够检查一下,如果用户使用特定的距离函数,首先,实际上是一个函数.在此之后,我可以查看其他内容,但我的主要问题是:如何断言dist_fun实际上是一个函数?
如果没有简单的方法可以做到这一点,或者有另一种方法来做这种事情,请告诉我.我之前在Python中做过一些测试,但直到现在才遇到过这个问题.我已经看到函数的"类型"是"函数",但是Python不允许我将它用作类型?回去尝试会更容易 - 除了这里吗?
当然,Python的座右铭是,请求宽恕而不是许可更好.所以,你会在用户完全没有计数传给你有效输入,或者except
荷兰国际集团的TypeError
,如果你试图调用的东西,不能被称为是被抛出.
话虽这么说,如果你真的想断言某事是一个函数,我想你总是可以检查类型......
assert (callable(dist_fun))