¿Por qué “si foo:” sigue a la twig incluso si la función foo devuelve False?

def foo(a): print("I'm foo") return False if foo: print("OK") else: print("KO") 

Lo ejecuto y vuelve OK. Lo sé, debería haber escrito if foo():

A menudo olvido el paréntesis al llamar a funciones sin parámetros y necesito una explicación sobre el resultado.

¡Gracias de antemano por sus respuestas!

Cuando escribes

  if foo: print("OK") else: print("KO") 

Realmente estás probando si la función puntero foo . Está definido, por lo que imprime “OK” y no llama a la función. Con el paréntesis, llamas a la función foo y ejecuta su código.

python if condición se muestra si el valor no es igual a ninguno de estos

 0, None, "", [], {}, False, () 

aquí

 def foo(a): print("I'm foo") return False >>>foo  

Eso significa que la variable foo apunta a la función. Si llama a su función foo(arg) entonces devolverá False como esperaba.

 >>>foo("arg") False 

En este caso su código es el mismo que

 if foo != None: print("OK") else: print("KO") 

El resultado es

“DE ACUERDO”

porque foo realmente existe.