Как определить, является ли переменная Python функцией? - PullRequest
578 голосов
/ 09 марта 2009

У меня есть переменная x, и я хочу знать, указывает ли она на функцию или нет.

Я надеялся, что смогу сделать что-то вроде:

>>> isinstance(x, function)

Но это дает мне:

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'function' is not defined

Причина, по которой я выбрал это, потому что

>>> type(x)
<type 'function'>

Ответы [ 23 ]

0 голосов
/ 09 июня 2013

Следуя предыдущим ответам, я придумал это:

from pprint import pprint

def print_callables_of(obj):
    li = []
    for name in dir(obj):
        attr = getattr(obj, name)
        if hasattr(attr, '__call__'):
            li.append(name)
    pprint(li)
0 голосов
/ 12 января 2018

Ниже приведен «способ repr», чтобы проверить это. Также работает с лямбдой.

def a():pass
type(a) #<class 'function'>
str(type(a))=="<class 'function'>" #True

b = lambda x:x*2
str(type(b))=="<class 'function'>" #True
0 голосов
/ 11 ноября 2013

Если код будет продолжать выполнять вызов, если значение вызывается, просто выполните вызов и поймайте TypeError.

def myfunc(x):
  try:
    x()
  except TypeError:
    raise Exception("Not callable")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...