Как найти тип переменной Python при наведении курсора мыши на переменную в коде Visual Studio?

Я хочу узнать ее тип при наведении мышки на переменную, но это не получается. Кто-нибудь знает как это сделать? Например, при наведении на x пишет какое-то Literal, хотя тип переменной я прямо объявил как int.

В большинстве случаев будет указан тип (попробуйте x=1235.0, и вы увидите float), здесь вы видите, что он хранится как литерал. Благодаря этому вы сможете отличить его исходный тип по тому, что содержится в скобках. Однако я рекомендую понимать литералы, потому что если бы вы, например, написали x = [123], вы получили бы список целых чисел, а не список литералов geeksforgeeks.org/literals-in-python

me9hanics 27.04.2024 21:05

Не работает. таким образом он определяет только тип float, но не может определить string или int

Migner 27.04.2024 21:52

Я знаю, но вы сами можете понять, что было источником, если вы видите "..." значит это была строка, если вы видите целое число - это было int и т.д.

me9hanics 28.04.2024 00:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В подсказке Literal относится к typing.Literal, который представляет собой специальную форму, используемую для определения типа, представляющего собой набор всех заданных литеральных значений.

Легко увидеть, что Literal[1] — это подтип int, Literal['foo'] — подтип str и так далее.

В этом случае средство проверки типов (Pyright) может определить более конкретный тип для x, поэтому оно и сделало именно это. Это особенность, а не ошибка. В зависимости от потока этот тип может меняться:

(playground link)

x = 1235
reveal_type(x)      # Literal[1235]

for _ in range(0):
    x += 2
    reveal_type(x)  # int

reveal_type(x)      # int

Следует также отметить, что это может быть, а может и не быть в случае с другими средствами проверки типов; то есть это зависит от реализации. Возьмем, к примеру, Mypy:

(playground links: Mypy , Pyright)

x1: int
x1 = 1235
reveal_type(x1)  # pyright => Literal[1235]
                 # mypy    => int

x2: int = 1235
reveal_type(x2)  # pyright => Literal[1235]
                 # mypy    => int

x3 = 1235
reveal_type(x3)  # pyright => Literal[1235]
                 # mypy    => int

x4 = 1233 + 2
reveal_type(x4)  # pyright => Literal[1235]
                 # mypy    => int

Насколько мне известно, в настоящее время нет настроек для контроля такого поведения.

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