Heim >Backend-Entwicklung >Python-Tutorial >Wie erkennt man, ob eine Variable eine Funktion in Python darstellt?

Wie erkennt man, ob eine Variable eine Funktion in Python darstellt?

Susan Sarandon
Susan SarandonOriginal
2024-10-18 20:00:311010Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn