En Python, il est courant de rencontrer des variables pouvant faire référence à des fonctions. Déterminer si une variable pointe vers une fonction est essentiel pour diverses tâches de programmation.
Tenter d'utiliser isinstance(x, function) pour identifier des fonctions peut échouer en raison de l'objet "fonction" non défini. Considérez plutôt les approches suivantes :
La fonction callable() sert d'indicateur fiable. Vous pouvez l'utiliser comme suit :
<code class="python">callable(obj)</code>
Vous pouvez également vérifier la présence de l'attribut __call__ :
<code class="python">hasattr(obj, '__call__')</code>
Bien que types.FunctionTypes et inspect.isfunction offrent également des moyens d'identifier les fonctions, ils comportent certaines limitations. Notamment, ils renvoient False pour les fonctions implémentées en C plutôt qu'en Python. Cela peut conduire à des résultats inattendus, comme indiqué ci-dessous :
<code class="python">>>> isinstance(open, types.FunctionType) False >>> callable(open) True</code>
La méthode la plus fiable consiste à vérifier si l'objet peut être appelé. Si tel est le cas, cela est considéré comme une fonction. C'est ce qu'on appelle l'approche du « typage canard » :
<code class="python">callable(obj)</code>
En conclusion, la fonction callable() et l'attribut __call__ fournissent des moyens efficaces pour détecter si une variable fait référence à une fonction en Python. Soyez conscient des mises en garde associées à types.FunctionTypes et inspect.isfunction pour les fonctions non Python.
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!