python – 使用class作为特殊值?

python – 使用class作为特殊值?,第1张

概述在 Python中使用类作为特殊值是否丑陋? 考虑一下: def find_result(): result = None # do something to find the result, even recursing return resultr = find_result()if r is None: raise Exception("we have 在 Python中使用类作为特殊值是否丑陋?

考虑一下:

def find_result():    result = None    # do something to find the result,even recursing    return resultr = find_result()if r is None:     raise Exception("we have no result")

如果我希望结果是数字或任何“正常”类型,这将完美地工作.

但是,如果存在任意数据结构,结果可以是从None到另一个结构的任何内容呢?我在我的案例中所做的是:

class noresult:    """i'm even less than `None`."""    passdef query(data,path):    result = noresult    # traverse and recurse into the data structure    return resultr = query()if r is noresult:     raise Exception("our hands are empty")

它有效,但我无法摆脱这种感觉,我有点滥用这里的贫困阶层,甚至可能存在潜伏在里面的真正危险.

这是真的吗?我在上课吗?或者只是我的算法很糟糕,如果它需要依赖这样的“特殊无”?

解决方法 它被称为哨兵,你可以使用任何独特的对象:

sentinel = object()if r is sentinel:    raise Exception(..)

这里我使用了一个简单的object()实例而不是自定义类.

自定义类确实具有可能更自我记录的优点;如果您的API必须将对象传递给API的用户(可以是代码),那么显式类更好.仅在API的黑盒子中使用,object()就可以了.

您可能想要考虑在现在返回标记的位置处引发异常.您可以再次捕获异常.

总结

以上是内存溢出为你收集整理的python – 使用class作为特殊值?全部内容,希望文章能够帮你解决python – 使用class作为特殊值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1192934.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存