断言是Python中的有效函数

 吴家南小南 发布于 2023-02-10 14:54

假设我有以下代码,它接受一个距离函数和两个点,并吐出距离:

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不允许我将它用作类型?回去尝试会更容易 - 除了这里吗?

1 个回答
  • 当然,Python的座右铭是,请求宽恕而不是许可更好.所以,你会在用户完全没有计数传给你有效输入,或者except荷兰国际集团的TypeError,如果你试图调用的东西,不能被称为是被抛出.

    话虽这么说,如果你真的想断言某事是一个函数,我想你总是可以检查类型......

    assert (callable(dist_fun))
    

    2023-02-10 14:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有