Maison >développement back-end >Tutoriel Python >Comment détecter si une variable représente une fonction en Python ?

Comment détecter si une variable représente une fonction en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-18 20:00:311007parcourir

How to Detect Whether a Variable Represents a Function in Python?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn