web-dev-qa-db-fra.com

Union facultative de type indice de type

Dans le système de type indice, Optional[T] est dit être équivalent à Union[T, None]

Est-ce que cela fonctionne pour des arguments de type multiple? c'est à dire,

est-ce que Optional[T,U] rompre à Union[T,U,None], ou dois-je l'écrire comme Optional[Union[T,U]]

12
flakes

Vous pouvez penser à la bibliothèque - typing Spécification sur la manière de déclarer certains types. Si quelque chose n'est pas défini dans cette spécification, il est toujours préférable de le supposer être un comportement indéfini.

Toutefois, dans le cas particulier de python et en tapant, nous avons un vérificateur de type statique type de référence qui est myPy . Donc, afin d'obtenir une réponse à votre question , ou juste vérifier par programme par programme, nous pouvons l'utiliser et voir s'il affiche les avertissements.

Voici un exemple:

$ cat check_optional.py 
import typing
def fn(x: typing.Optional[int, str]):
    pass
$ mypy check_optional.py 
check_optional.py:3: error: Optional[...] must have exactly one type argument

Donc non, Optional[T, U] n'est pas possible en termes de myPY même s'il n'y a pas de mal à le déclarer dans la bibliothèque typing.

Outre de "Programmation fonctionnelle" Perspective Optional et Union sont deux distinctes mais bien connues et bien définies monad . Une combinaison de deux monades (Optional[T, U, None]) est une autre monade, qui se comporte toutefois différemment de Optional et ne devrait donc pas être nommée ainsi.

4
Vladimir