Sintaxis de Python ‘Si no’

Estoy un poco confundido acerca de cómo / por qué tantos desarrolladores de Python usan, if not en sus declaraciones condicionales.

por ejemplo, digamos que teníamos una función,

 def foo(bar = None): if not bar: bar = 2 

Pero, ¿por qué seguir así? Quiero decir, ¿no haría if bar != None o if bar is not None será más explícito? ¿Qué pasa if not bash decirlo?

Sí, if bar is not None es más explícita, y por lo tanto mejor, asumiendo que es lo que usted quiere. Ese no es siempre el caso, hay diferencias sutiles: if not bar: se ejecutará si bar es cualquier tipo de cero o contenedor vacío, o False . Muchas personas no usan la not bar donde realmente quieren decir que la bar is not None .