Détecter si une variable est une fonction
En Python, déterminer si une variable représente une fonction peut être déroutant. L'approche intuitive, isinstance(x, function), échoue en raison de la référence 'fonction' non définie.
Solution 1 : callable()
Pour Python 2.x ou 3.2, callable() fournit une vérification directe et simple :
<code class="python">callable(x)</code>
Solution 2 : call Attribut (Python 3.x avant 3.2)
Avant Python 3.2, il faut inspecter l'objet pour l'attribut __call__ :
<code class="python">hasattr(x, '__call__')</code>
Mises en garde concernant les types et l'inspection
While types.FunctionTypes et inspecter Les méthodes .isfunction existent, elles peuvent fournir des résultats inattendus. Les fonctions non Python, telles que de nombreuses fonctions intégrées, renvoient False en utilisant ces méthodes :
<code class="python">import types, inspect isinstance(open, types.FunctionType) # False callable(open) # True</code>
Meilleure pratique : Duck Typing
Plutôt que de s'appuyer sur isinstance ou inspect, l'approche privilégiée est de vérifier si l'objet peut être appelé, en imitant le principe du "type canard" :
<code class="python">def quacks_like_a_function(x): return callable(x)</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!