Erkennen, ob eine Variable eine Funktion ist
In Python kann es verwirrend sein, festzustellen, ob eine Variable eine Funktion darstellt. Der intuitive Ansatz isinstance(x, function) schlägt aufgrund der undefinierten „Funktions“-Referenz fehl.
Lösung 1: callable()
Für Python 2.x oder 3.2 bietet callable() eine direkte und unkomplizierte Prüfung:
<code class="python">callable(x)</code>
Lösung 2: call Attribut (Python 3.x vor 3.2)
Vor Python 3.2 muss man das Objekt auf das Attribut __call__ untersuchen:
<code class="python">hasattr(x, '__call__')</code>
Vorbehalte bei Typen und Inspektion
Während der Typen.FunctionTypes und inspect .isfunction-Methoden vorhanden sind, können sie unerwartete Ergebnisse liefern. Nicht-Python-Funktionen, wie viele integrierte Funktionen, geben mit diesen Methoden „False“ zurück:
<code class="python">import types, inspect isinstance(open, types.FunctionType) # False callable(open) # True</code>
Best Practice: Duck Typing
Anstatt sich auf isinstance oder inspect zu verlassen, Der bevorzugte Ansatz besteht darin, zu prüfen, ob das Objekt aufgerufen werden kann, und dabei das „Duck-Typed“-Prinzip nachzuahmen:
<code class="python">def quacks_like_a_function(x): return callable(x)</code>
Das obige ist der detaillierte Inhalt vonWie erkennt man, ob eine Variable eine Funktion in Python darstellt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!