Ich möchte das Verhalten eingebauter Funktionen (wie getattr
) nachahmen, mit denen der Benutzer einen "Standard" -Rückgabewert angeben kann. Mein erster Versuch war dies zu tun
Das Problem ist, dass, wenn die Benutzer möchten, dass None
ihr Rückgabewert ist, diese Funktion stattdessen eine Ausnahme auslösen würde. zweiter Versuch:
Damit wird das oben genannte Problem behoben und der Benutzer kann einen beliebigen Wert angeben. Dies führt jedoch zu einer Belästigung, da der Benutzer in seinen Funktionsaufrufen immer default=bar
angeben muss. Sie können am Ende nicht nur bar
bereitstellen. Ebenso könnte *args
verwendet werden, verhindert jedoch, dass Benutzer default=bar
verwenden, wenn sie diese Syntax bevorzugen.
Die Kombination von *args
und **kwargs
bietet eine praktikable Lösung, aber es fühlt sich an, als würde dies viel Aufwand erfordern. Es maskiert möglicherweise auch fehlerhafte Funktionsaufrufe (z. B. bar = myfunc(foo, baz, default=qux)
)
Gibt es eine einfachere Lösung? (Python 3.2, wenn das wichtig ist)
Sie müssen einen Sentinel verwenden, um zu erkennen, dass kein Standardwert festgelegt wurde:
%Vor% Das funktioniert, weil eine Instanz von object()
immer ihre eigene Speicher-ID hat und somit is
nur dann True liefert, wenn der exakte Wert an der richtigen Stelle belassen wurde. Jeder andere Wert wird nicht als das gleiche Objekt registriert, einschließlich None
.
Sie werden verschiedene Varianten des obigen Tricks in verschiedenen Python-Projekten sehen. Jeder der folgenden Wächter würde auch funktionieren:
%Vor%Tags und Links python default-value return-value