Тип хинтинга с союзами и предметами коллекционирования 3.9 или выше

Я уже довольно давно пользуюсь Python 3.8. Обычно я набираю подсказку с соглашением:

from typing import List, Union

some_stuff: List[Union[int, str, float, List[str]]] = [98, "Fido", -34.925, ["Phantom", "Tollbooth"]]

Я понимаю, что с Python 3.9 или выше вы можете набирать списки подсказок и предметы коллекционирования, например: some_ints: list[int]

Если у вас есть объединение типов, которые может занимать переменная, вам все равно нужно импортировать класс Union? вот так:

from typing import Union

some_stuff: list[Union[int, str, float, list[str]]] = [98, "Fido", -34.925, ["Phantom", "Tollbooth"]]

Или есть новое соглашение для подсказки типа Union?

Что ты имеешь в виду? Ваш второй фрагмент по-прежнему импортирует Union. И какое отношение вы имеете к союзам, используя List или list?

Brian 13.02.2023 04:06

Мой вопрос заключается в том, как вы вводите союзы подсказок по-прежнему, даже с учетом нового соглашения о списках.

Hofbr 13.02.2023 04:09
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
1
2
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

PEP 604, который был реализован в Python 3.10, позволяет формировать Union типы с помощью оператора | (который существовал с исключительно числовыми значениями на протяжении большей части истории Python).

Таким образом, в достаточно поздних версиях Python вы можете написать подсказку типа следующим образом, не требуя импорта из typing:

some_stuff: list[int|str|float|list[str]] = [98, "Fido", -34.925, ["Phantom", "Tollbooth"]]

Хотя это конкретно отвечает на ваш вопрос, я хотел бы отметить, что немного подозрительно, что данные вашего примера точно соответствуют порядку типов, которые вы перечисляете в Union. Если вы всегда будете иметь ровно по одному типу данных каждого типа (а не какую-то их неизвестную смесь), вы, вероятно, захотите, чтобы тип намекал на значение по-разному, например. с tuple[int, str, float, list[str]], который указывает, что будет по одному значению каждого в этом порядке. Возможно, вам придется использовать фактический кортеж для значения, я не уверен, что есть способ намекнуть на фиксированный шаблон значений в объекте списка.

Другие вопросы по теме