I agree that some more docs on the specialness of None (and, to a lessor extent, True and False).
A few comments: > None is a keyword > ============== >>>> None = 0 > SyntaxError: can't assign to keyword One of the implications of this is that “None” will always be the Singleton None object — so you can (and should) use: Something is None To test for None. > The Command Line Interpreter hides None > ================================= >>>> None That’s a good one to highlight! > > None is false in a boolean context > ========================== >>>> bool(None) > False Maybe this belongs more in a discussion of “Falseyness” > Procedures return None > ================== >>>> a = [3,1,2] >>>> b = a.sort() >>>> a, b > ([1, 2, 3], None) This is less about None than about the convention that mutating methods return None. Maybe that discussion belongs elsewhere. > Dictionary get returns None if not found > ============================== >>>> {}.get('dne') is None > True Belongs with dict docs really, and not really true — dict.get() returns the default value, which is None be default. > None is default return value > ===================== >>>> def fn(): pass > ... >>>> fn() # No response! >>>> print(fn()) # Here's why. > None Yup. > None is used as a sentinel default value > ============================== > Particularly useful when default value must be determined > in body of function. > --- > def insort_right(a, x, lo=0, hi=None): > # ... > if hi is None: > hi = len(a) > --- This is also a convention — and primarily applies to mutable defaults, which you hardly ever want to assign directly. So a good example of None being used as a sentinel, but nog really anything special about None. -CHB > / _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/