Eingabe Geben Sie Python ein, wenn das Wörterbuch einen anderen Datentyp hat

Nov 11 2020

Ich habe kürzlich die Angewohnheit übernommen, Typprüfungen durchzuführen. Sie können meinen vorherigen Beitrag hier sehen . Ich stieß jedoch bald auf ein Problem. Mein targetArgument ist ein dictmit 7 Schlüssel-Wert-Paaren, aber nicht alle haben den gleichen Datentyp. Liegt diese Syntax unter dem richtigen Weg? Es scheint sehr umständlich, dies zu tun.

def augmentate(self, image: np.ndarray, target: [Dict[str, np.ndarray],
                                                 Dict[str, torch.Tensor],
                                                 Dict[str, torch.Tensor],
                                                 Dict[str, torch.Tensor],
                                                 Dict[str, torch.Tensor],
                                                 Dict[str, torch.Tensor],
                                                 Dict[str, torch.Tensor]]):
    

Antworten

1 AmiTavory Nov 11 2020 at 22:09

Es hängt wirklich von Ihrer Absicht ab.

target: Union[Dict[str, np.ndarray],Dict[str, torch.Tensor]]

ist entweder ein Wörterbuch von einer Zeichenfolge zu einem ndarray oder ein Diktat von einer Zeichenfolge zu einem Tensor.

 target: Dict[str, Union[np.ndarray, torch.Tensor]]

ist ein Wörterbuch von einer Zeichenfolge zu einem ndarray oder einem Tensor.

Ersteres kann also eine von mehreren Arten homogener Wörterbücher sein, während letzteres ein heterogenes Wörterbuch ist.

1 James Nov 11 2020 at 22:05

Ihre Typprüfung sollte alle Typen beschreiben, für die Ihre Methode ausgelegt ist. In Ihrem Fall scheinen dies zwei zu sein, die der Unionstyp beschreibt:

def augmentate(self, image: np.ndarray, target: Dict[str, Union[np.ndarray, torch.Tensor]]):