• Python中的Sentinel(哨兵)值


     哨兵值是一个特殊值(唯一),因为和所有其它值不同,所以可以作为区分其它值得标记。

    你有可能已经使用过它,比如

    val = mydict.get("some_key", None)

     当"some_key",不存在时,返回None。在这儿None可以认为是哨兵值。

    但问题是,如果本来它的值有可能是None

    mydict['some_key'] = None   

    你可能会考虑其它的哨兵值。

    val = mydict.get("some_key", "NONE")  

    但如果"NONE"也是合法值呢。你可能又要换成其它值,换来换去,问题还是没有彻底解决。

    这时候,你需要一个独特的值,来彻底和其它值区分。

    MISSING = object()
    val = mydict.get(key, MISSING)
    
    # later...
    if val is MISSING:
       # ...
    
    object()的这个实例MISSING,在其它任何地方都不会出现,不会出现重复的可能。
    来看看Flask源码中的例子
    # a singleton sentinel value for parameter defaults
    _sentinel = object()
    class Flask():
      # ... def do_teardown_request(self, exc=_sentinel): if exc is _sentinel: pass

      

    参考:https://treyhunner.com/2019/03/unique-and-sentinel-values-in-python/ 

      

     
  • 相关阅读:
    小组件
    rabbitMQ操作
    爬虫
    爬虫相关
    HTTP相关
    Python基本数据类型
    机器学习技法 之 支持向量回归(SVR)
    机器学习基石 之 线性回归(Linear Regression)
    机器学习技法 之 径向基函数网络(RBF Network)
    各个常用的排序算法的适用场景详细分析
  • 原文地址:https://www.cnblogs.com/jeff-ideas/p/10540320.html
Copyright © 2020-2023  润新知