Что означает вертикальная полоса «|» (канал) в аннотациях типа аргументов функции?

#python #python-3.x #type-hinting #type-annotation

#python #python-3.x #подсказка типа #тип-аннотация

Вопрос:

Я наткнулся на функцию с такой подписью:

 def get_quantile(numbers: List[float], q: float | int ) -> float | int | None :
  

Что это значит?

Это синтаксическая ошибка в моем python 3.8. Нужно ли мне что-то импортировать future , чтобы заставить его работать?

Комментарии:

1. python.org/dev/peps/pep-0604

Ответ №1:

Согласно PEP 604, | будет использоваться для обозначения типов объединения из Python 3.10.

Так float | int будет означать Union[float, int] , т.Е. значение с плавающей точкой или int .

Ответ №2:

Это означает or . So q: float | int означает, что q это может быть либо a float , либо an int .

Комментарии:

1. Вы уверены or , что это может быть в аннотации? Помимо некоторых странных вычислений типов и значений. Извините за атаку на ваш ответ, но вы сделали «или» похожим на ключевое слово Python, которое может ввести кого-то в заблуждение 😉

2. На самом деле это не означает or , а точнее «объединение», что согласуется с использованием этого же оператора для наборов и словарей. И нет, or ключевое слово не может использоваться в аннотации типа.