Python中的Sentinel 哨兵 值

2022-05-19 12:49:49 字數 847 閱讀 5910

哨兵值是乙個特殊值(唯一),因為和所有其它值不同,所以可以作為區分其它值得標記。

你有可能已經使用過它,比如

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

參考: 

python中 python中的 與

這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...

python中的物件 Python中的變數 物件

由於沒時間系統學習下python 只能見乙個問題 乙個問題了 一 初級 物件 關於python中的資料型別,今天重新認識了下。參考 首先,python中,物件才有型別,變數是沒有型別的,它只是物件的 引用 其次,python中物件被分為兩類 可更改物件和不可更改物件 包括numbers,string...

python中的引數傳遞 python中的引數傳遞

begin 前面在介紹python的六大資料型別的時候提到根據資料可變和不可變進行的資料型別分類 python3 的六個標準資料型別中 不可變資料 3 個 number 數字 string 字串 tuple 元組 可變資料 3 個 list 列表 dictionary 字典 set 集合 pytho...