python - gibt einen Standardwert zurück

8

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

%Vor%

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:

%Vor%

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) )

%Vor%

Gibt es eine einfachere Lösung? (Python 3.2, wenn das wichtig ist)

    
Steve 04.09.2012, 14:31
quelle

1 Antwort

14

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%     
Martijn Pieters 04.09.2012, 14:33
quelle