Ever needed a global object that act as None but not quite ?
Like for example key-word argument for function, where None make sens, so you need a default value.
One solution is to create as singleton object:
mysingleton = object()
Though it becomes difficult to track the singleton across libraries, and teach users where to import this from.
It’s also relatively annoying use this singleton across library.
>>> import undefined >>> from undefined import Undefined >>> undefined is Undefined True
It work (for now) mostly like a singleton object
Though it’s neither truthy not falsy
>>> if undefined: print(True) raise NotImplementedError
Because it is a module you can use it lowercase:
Because it looks more like a keyword (None, True, False), you can use it upper case:
import undefined as Undefined
from undefined import Undefined
I tend to be torn between lowercase, for simplicity, and Uppercase.
undefined is likely slower, and as it is a regular Python object there are a few on purpose (or not difference).
>>> None = 3 SyntaxError: can't assign to keyword
>>> undefined = 3 >>> undefned 3
>>> undefined.value = 42 >>> undefined.value 42
(might be able to fix that with __get_attr__
If you test for boolean value of undefind if will raise. That is to say: the following will fail:
value = undefined if value: pass # will raise before reaching here.
You have to check for identity:
value = undefined other = 1 if value is undefined: pass # will execute
for info, undefined is not True,False, not undefined with respect to identity
>>> undefined is True False >>> undefined is False False >>>: undefined is None False
str(undefined) raises. repr(undefined) is the unicode string 'Undefined'