Wie erstelle ich ein falsches Sentinel-Objekt in Python?Python

Python-Programme
Anonymous
 Wie erstelle ich ein falsches Sentinel-Objekt in Python?

Post by Anonymous »

Ich habe eine Funktion, die durch die Übergabe eines von zwei Schlüsselwortargumenten aufgerufen werden soll. Ich verwende ein Sentinel-Objekt als Standardwert, damit ich sicherstellen kann, dass niemand einfach func() ohne Argumente aufruft, was ein klarer logischer Fehler ist. Es ist in Ordnung, die Funktion aufzurufen, indem Sie None als Wert für eines der Argumente übergeben. In diesen Fällen führt es einfach keine Verarbeitung durch.

Code: Select all

NO_VALUE = object()

def func(*, arg1 = NO_VALUE, arg2 = NO_VALUE):
if arg1 is NO_VALUE and arg2 is NO_VALUE:
raise ValueError("Pass in one of `arg1` or arg2`.")

if arg1 is not NO_VALUE and arg1:
# Do something with a truthy `arg1` value.
if arg2 is not NO_VALUE and arg2:
# Do something with a truthy `arg2` value.
Könnte ich NO_VALUE irgendwie einfach falsch machen, so dass ich „if arg1 is not NO_VALUE and arg1 and if arg2 is not NO_VALUE and arg2 zu nur if arg1 bzw. if arg2 vereinfachen könnte?
Ich habe versucht, NO_VALUE zu einem leeren Tupel () zu machen, aber es scheint, dass das id() eines leeren Tupels ist immer(?) dasselbe wie id() eines anderen leeren Tupels. Ich möchte auch nicht NO_VALUE machen, z.B. ein leeres Listenobjekt, seitdem würde ich Linter-Warnungen über die Verwendung eines veränderlichen Standardwerts erhalten.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post