Pythonische Lösung für bedingte Argumente

8

Ich habe eine Funktion mit zwei optionalen Parametern:

%Vor%

Irgendwo anders in meinem Code mache ich ein bedingtes Argument wie:

%Vor%

Gibt es irgendwie in diesem Muster Code zu vereinfachen?

BEARBEITEN :

Nehmen wir an, ich bin nicht berechtigt die Standardparameterlogik in func zu implementieren.

Ich könnte mehrere Funktionen haben wie func : func1 , func2 und func3 würden alle das

enthalten %Vor%

Aussagen.

Aber ich rufe diese Reihe von Funktionen auf, um Duplikate zu eliminieren. (mit einem Dekorator)

    
satoru 25.06.2012, 08:03
quelle

8 Antworten

12

Wenn Sie in func nichts ändern wollen, dann wäre die sinnvolle Option, ein Argumentdiktat an die Funktion zu übergeben:

%Vor%

oder einfach:

%Vor%     
Vader 25.06.2012, 09:12
quelle
1

Warum diese Logik nicht an die Funktion übergeben?

%Vor%     
Tim Pietzcker 25.06.2012 08:08
quelle
1

um Ihre spezifische Frage zu beantworten, würde ich tun:

%Vor%

Am pythischsten wäre es jedoch, None als Standardwert in Ihrer Funktion zu verwenden:

%Vor%

und rufe einfach f(a, b)

auf     
Simon 25.06.2012 08:13
quelle
1

Geht man von den jetzt gelöschten Kommentaren zu der Frage aus, dass die Überprüfung dafür gedacht ist, dass die Variablen None sind, anstatt falsch zu sein, ändern Sie func so, dass die Argumente None :

%Vor%

Und dann einfach func(a, b) jedes Mal aufrufen.

    
lvc 25.06.2012 08:13
quelle
1

Standardmäßig verwenden alle Methoden in Python variable Argumente .

Wenn Sie ein Argument in der Signatur der Methode definieren, machen Sie es explizit erforderlich. In Ihrem Snippet geben Sie einen Standardwert ein, der nicht optional ist.

Betrachten Sie Folgendes:

%Vor%

In diesem Snippet sind sowohl a als auch b erforderlich , da ich keine Standardwerte definiert habe. Sie sind nicht optional .

In Ihrem Snippet sind sie jedoch optional, da Sie ihnen Standardwerte in der Methodensignatur gegeben haben, wie sie aussehen , aber ihnen sind nur Standardwerte zugewiesen.

%Vor%

Sie können dies überprüfen, indem Sie die Argumentliste im Hauptteil der Methode überprüfen:

%Vor%

Eine Methode, mit der Ihre Funktion beliebige Anzahl von Argumenten akzeptieren kann (mit anderen Worten, sie alle optional machen):

%Vor%     
Burhan Khalid 25.06.2012 08:13
quelle
1

Sie können einen Dekorator hinzufügen, der None arguments eliminiert:

%Vor%     
georg 25.06.2012 08:21
quelle
0

Dies könnte funktionieren:

%Vor%     
Jon Clements 25.06.2012 08:35
quelle
0

Um Ihre wörtliche Frage zu beantworten:

%Vor%

Bearbeiten: Siehe Kommentar, warum dies die Frage nicht beantwortet.

    
WolframH 25.06.2012 08:35
quelle

Tags und Links