¿Por qué los objetos de función se evalúan como Verdaderos en python?

En python es válido hacer una construcción como:

def a(): return 0 if a: print "Function object was considered True" else: print "Function object was considered False" 

Deseo preguntar cuál es la lógica de que un puntero de función se evalúe como Verdadero.

¿Por qué se insertó este tipo de construcción en el lenguaje?

Muchas cosas evalúan a True en Python. De la documentación sobre operadores booleanos :

En el contexto de las operaciones booleanas, y también cuando las expresiones son utilizadas por las declaraciones de flujo de control, los siguientes valores se interpretan como falsos: False , None , cero numérico de todos los tipos y cadenas y contenedores vacíos (incluidas cadenas, tuplas, listas, diccionarios) , conjuntos y frozensets). Todos los demás valores se interpretan como verdaderos.

Las funciones en Python, como muchas otras cosas, son objetos , y no están vacías. Así, en un contexto booleano, se evalúan como Verdadero.

Las reglas para evaluar la “veracidad” se encuentran en el capítulo de documentación de Python sobre Pruebas de valor de verdad .

Tenga en cuenta en particular que

Todos los demás valores se consideran verdaderos, por lo que los objetos de muchos tipos siempre son verdaderos.

En conclusión; Los objetos de función son siempre verdaderos.

Una lista de objetos que son falsos en python:

  • None
  • []
  • {}
  • empty set
  • empty frozenset
  • False
  • 0
  • 0.0
  • 0L
  • 0j
  • vacío defaultdict
  • Classes que han implementado el __nonzero__() y que devuelve un valor falso, de lo contrario se __len__() . En Python, 3x __bool__() reemplazó a __nonzero__() .