Функция callable() в Python, проверяет можно ли вызвать объект
Функция callable() возвращает True , если указанный объект вызываемый, в противном случае она возвращает значение False .
Обратите внимание, что объект будет вызываемый, если в нем определен метод __call__() .
Дополнительно смотрите «Утиная типизация ‘Duck Typing’ в Python», где один из разделов объясняет поведение, которое свойственно объектам callable в языке Python.
Пример проверки на вызываемость объекта.
class Foo: def __call__(self): print('called') >>> callable(Foo()) # True # проверим, можно ли вызвать переменную >>> x = 5 >>> callable(x) #False
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора
Callable (вызываемый)
Типы, поддерживающие возможность их вызова в качестве функции.
Примеры сущностей, поддерживающих вызов:
- Встроенные и пользовательские функции;
- Встроенные и пользовательские методы;
- Функции-генераторы;
- Классы (как классические так и нового стиля);
- Экземпляры классов.
Вызов всегда сопровождается возвратом какого-либо значения (возможно None) за исключением случаев, когда возбуждается исключение.
# Вызов общей функции len()
# с передачей списка в качестве единственного аргумента
# и возвратом вычисленной длины списка.
len([1, 2, 3]) # 3
Детали вычисления значения зависят от типа вызываемого объекта.
Синонимы поиска: Callable (вызываемый), вызываемый, вызываемые, вызов
Статьи раздела
| def (функция/метод) | Последовательность инструкций, возвращающая некое значение. |
| Аргументы вызова | Вызов может осуществляться при помощи позиционных и/или именованных а… |
| Параметры вызываемых объектов | Именованные сущности в определениях типов, поддерживающих вызов, опре… |
Функции callable() и __call __() в Python
Функция callable (object) в Python возвращает True, если объект окажется вызываемым, в противном случае возвращает False.
Вызываемый объект __call __()
Объект называется вызываемым, если он определяет функцию __call __(). Если эта функция определена, то x (arg1, arg2,…) является сокращением для x .__ call __ (arg1, arg2,…).
Обратите внимание, что функция callable() возвращает True, если объект кажется вызываемым, возможно, что она вернет True, даже если объект не является вызываемым. Однако, если эта функция возвращает значение False, объект определенно нельзя вызвать.
Кроме того, класс в python всегда вызывается. Поэтому всегда используйте callable() с экземпляром класса, а не с самим классом. Давайте посмотрим на простой пример, чтобы проверить это поведение.
class Person: i = 0 def __init__(self, id): self.i = id p = Person(10) print('Person Class is callable = ', callable(Person)) print('Person object is callable = ', callable(p))
Person Class is callable = True Person object is callable = False

Пример
Определим класс с функцией __call __().
class Employee: name = "" def __init__(self, i, n): self.id = i self.name = n def __call__(self, *args, **kwargs): print('printing args') print(*args) print('printing kwargs') for key, value in kwargs.items(): print("%s == %s" % (key, value)) e = Employee(10, 'Pankaj') # creating object print(e) # printing object print(callable(e))
* args используется для передачи переменных аргументов функции __call __().
** kwargs используется для передачи именованных аргументов функции __call __().
True
Давайте посмотрим на некоторые фрагменты кода, в которых мы будем использовать callable(), чтобы проверить, является ли объект вызываемым, а затем вызвать экземпляр как функцию.
if callable(e): e() # object called as a function, no arguments e(10, 20) # only args e.__call__(10, 20) e(10, 20, ) # only args of different types e(10, 'A', name='Pankaj', # args and kwargs both
printing args printing kwargs printing args 10 20 printing kwargs printing args 10 20 printing kwargs printing args 10 20 printing kwargs printing args 10 A printing kwargs name == Pankaj id == 20
Вызываемые объекты
Как известно функции в Python это обычные объекты, которые можно передавать в другие функции, возвращать из других функций и т. п., поэтому для них тоже есть свой тип Callable :
from typing import Callable def mysum(a: int, b: int) -> int: return a + b def process_operation(operation: Callable[[int, int], int], a: int, b: int) -> int: return operation(a, b) print(process_operation(mysum, 1, 5)) # 6
Здесь для аргумента operation функции process_operation проставлен тип Callable[[int, int], int] . Здесь [int, int] — это типы аргументов функции operation , получается, что у этой функции должно быть два аргумента и они оба должны иметь тип int . Последний int в определении типа Callable[[int, int], int] обозначает тип возвращаемого функцией значения.