callable
Вернёт True , если obj поддерживает возможность вызова, иначе — False .
callable(sum) # True
callable(int) # True
callable(1) # False
Возвращенное True , не гарантирует успешного вызова, однако False говорит о том, что вызов не пройдёт.
Следует учитывать, что классы поддерживают возможность вызова (вызов класса приводит к созданию экземпляра). Экземпляры классов поддерживают вызов, если в классе определён метод __call__().
Функция была удалена в версии -py3.0
Функция возвращена в версии +py3.2
Метод callable() в Python
Метод callable() возвращает True, если переданный объект кажется вызываемым. Если нет, возвращается False.
callable(object)
Параметры
Метод callable() принимает объект с одним аргументом.
Возвращаемое значение
callable() в Python возвращает:
- Истина — если объект кажется вызываемым
- Ложь — если объект не вызывается.
Важно помнить, что даже если callable() имеет значение True, вызов объекта все равно может завершиться ошибкой.
Однако, если callable() возвращает False, вызов объекта обязательно завершится ошибкой.
Пример 1: Как работает callable()?
x = 5 print(callable(x)) def testFunction(): print("Test") y = testFunction print(callable(y))
False True
Здесь объект x не вызывается. И объект y кажется вызываемым (но не может быть вызван).
Пример 2: вызываемый объект
class Foo: def __call__(self): print('Print Something') print(callable(Foo))
True
Экземпляр класса Foo кажется вызываемым (и в этом случае вызывается).
class Foo: def __call__(self): print('Print Something') InstanceOfFoo = Foo() # Prints 'Print Something' InstanceOfFoo()
Пример 3: объект выглядит вызываемым, но не вызывается
class Foo: def printLine(self): print('Print Something') print(callable(Foo))
True
Экземпляр класса Foo кажется вызываемым, но не вызываемым. Следующий код вызовет ошибку.
class Foo: def printLine(self): print('Print Something') print(callable(Foo)) InstanceOfFoo = Foo() # Raises an Error # 'Foo' object is not callable InstanceOfFoo()
True Traceback (most recent call last): File "", line 10, in TypeError: 'Foo' object is not callable
Callable (вызываемый)
Типы, поддерживающие возможность их вызова в качестве функции.
Примеры сущностей, поддерживающих вызов:
- Встроенные и пользовательские функции;
- Встроенные и пользовательские методы;
- Функции-генераторы;
- Классы (как классические так и нового стиля);
- Экземпляры классов.
Вызов всегда сопровождается возвратом какого-либо значения (возможно None) за исключением случаев, когда возбуждается исключение.
# Вызов общей функции len()
# с передачей списка в качестве единственного аргумента
# и возвратом вычисленной длины списка.
len([1, 2, 3]) # 3
Детали вычисления значения зависят от типа вызываемого объекта.
Синонимы поиска: Callable (вызываемый), вызываемый, вызываемые, вызов
Статьи раздела
| def (функция/метод) | Последовательность инструкций, возвращающая некое значение. |
| Аргументы вызова | Вызов может осуществляться при помощи позиционных и/или именованных а… |
| Параметры вызываемых объектов | Именованные сущности в определениях типов, поддерживающих вызов, опре… |
Вызываемые объекты
Как известно функции в 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] обозначает тип возвращаемого функцией значения.