zoukankan      html  css  js  c++  java
  • 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/ 

      

     
  • 相关阅读:
    Hadoop集群搭建-虚拟机安装(转)(一)
    集群环境搭建-SSH免密码登陆(二)
    Disruptor 极速体验
    Nexus3.0.0+Maven的使用(三)
    Nexus3.0.0+Maven的使用(二)
    Nexus3.0.0+Maven的使用(一)
    Spark读取Hbase的数据
    Java计算上下基线
    Spark算上下基线
    获取 iOS模拟器 里的安装包
  • 原文地址:https://www.cnblogs.com/jeff-ideas/p/10540320.html
Copyright © 2011-2022 走看看