2017-11-05 3 views
1

I extended a method mit einem zusätzlichen String-Parameter (Durchschnitt):Unterstützung Einzelsaite und Array als einen Parameter

classification_report(y_true, y_pred, average='micro') 

Ich stamme aus einer Bewertung auf:

def classification_report(y_true, y_pred, labels=None, target_names=None, 
          sample_weight=None, digits=2, average='weighted'): 

So ist die normale Nutzung so etwas wie wäre Github schlug der Rezensent vor, auch mehrere Werte zu unterstützen: average=['micro', 'weighted', 'macro']

Was wäre angemessen Weg, um das in Python zu lösen? Ich weiß, dass der Parameter einen beliebigen Typ haben kann. Aber wie soll man mit einer Liste von Strings umgehen? Und was wäre der Typ des Parameters? Union[str, List[str]]?

Momentan erwarte ich nur eine Schnur, die gerade ist. Aber falls ich auch eine Liste von Strings erlaube, sollte ich den Typ zuerst mit type(average) überprüfen und dann die Werte entsprechend verarbeiten? Gibt es eine elegante Möglichkeit, die Parametervariable in einen einheitlichen Typ umzuwandeln, etwa averages=listify(average), der entweder einen String oder eine Liste von Strings akzeptiert und immer eine Liste von Strings zurückgibt? Hier

+1

Persönlich würde ich bevorzugen * einfach * eine Sequenz von Strings *, und wenn Sie nur eine Option wollen, dann ist es eine Sequenz mit einem einzelnen Element. Das heißt, Sie verwenden wahrscheinlich nur 'if instance (arg, str): handle_string_arg() sonst: versuchen: für x in arg: ...' –

+0

mit einer 'listify' Funktion würde nur schieben Sie Ihre' isinstance' überprüfen woanders . –

+1

Verwechseln Sie auch nicht * list * -Objekte mit Arrays. –

Antwort

2

ist ein Beispiel von Pandas:

if level is not None: 
     if not isinstance(level, (tuple, list)): 
      level = [level] 

Dies ist Code aus dem Verfahren pandas.DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='') wo Ebene wird erwartet, dass ein int, str, tuple, or list, default None zu sein. Dieser einfache Code stellt lediglich sicher, dass der Parameter jetzt in einer Liste gespeichert wird, unabhängig davon, wie er angegeben wurde.

Verwandte Themen