проверить тип объекта, заданного строкой в ​​Python - PullRequest
1 голос
/ 19 октября 2011

Я хотел бы спросить, как определить тип объекта в Python.Я знаю, как сделать это "нормально", например,

import types

def f(x):
    return x

isinstance(f, types.FunctionType)

возвращает true.Но что, если у меня есть только строка, содержащая 'f', скажем a = 'f'.Что мне делать с собой?Как мне выяснить, является ли объект, указанный в строке, функцией, или чем-то еще?И прежде чем кто-нибудь спросит, это парсер, и поэтому я не знаю, является ли 'f' функцией;)

Спасибо,

v923z

Ответы [ 3 ]

0 голосов
/ 19 октября 2011

Чтобы узнать его тип, вы можете оценить его от строки до ее реального представления:

def f(x):
    return x

a = "f"
aEvaluated = eval(a)
print(type(aEvaluated))
isinstance(aEvaluated, types.FunctionType)
0 голосов
/ 19 октября 2011

Если «f» относится к переменной в локальной среде, используйте для поиска globals () :

>>> def f(x):
        return x

>>> a = 'f'
>>> type(globals()[a])
<type 'function'>
0 голосов
/ 19 октября 2011

Вы можете найти имя в globals() (таблица глобальных символов и locals() (таблица локальных символов):

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(x):
...     return x
... 
>>> globals()['f']
<function f at 0x1004c0230>
>>> import types
>>> isinstance(globals()['f'], types.FunctionType)
True
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...