Строка, представляющая имя переменной, как найти ее тип?

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть список переменных, которые я уже определил в своей программе (я получил его с помощью команды dir ()). Список содержит строки, которые являются именами этих переменных.

Я хочу найти тип каждого из них. type() Команда возвращает "str" . Что это такое (буквально говоря), но я хочу, каков тип переменной на самом деле, прежде чем преобразовывать ее имя в строку.

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

1. Из любопытства, что вы используете, кроме целей отладки, для получения типа каждой переменной в области видимости?

Ответ №1:

Вы можете сделать это:

 >>> b = 3
>>> for var in dir():
    print(var, type(vars()[var]))


__annotations__ <class 'dict'>
__builtins__ <class 'module'>
__doc__ <class 'NoneType'>
__loader__ <class 'type'>
__name__ <class 'str'>
__package__ <class 'NoneType'>
__spec__ <class 'NoneType'>
b <class 'int'>
var <class 'str'>
  

Ответ №2:

Если эти переменные являются локальными, вы можете использовать locals()['name'] or vars()['name'] для доступа к ним (см. раздел «Еще несколько объяснений» об их различии)

Для глобальных переменных используйте globals()['name']

 a = 'some string'
b = 123
c = 1.234
d = [1, 2, 3, 4]

print(type(locals()['a']))
print(type(locals()['b']))
print(type(locals()['c']))
print(type(locals()['d']))
  

Вывод

 <class 'str'>
<class 'int'>
<class 'float'>
<class 'list'>
  

Еще несколько пояснений:

  • globals() всегда возвращает словарь пространства имен модуля
  • locals() всегда возвращает словарь текущего пространства имен
  • vars() возвращает либо словарь текущего пространства имен (если вызывается без аргумента), либо словарь аргумента.