Атрибут types
Атрибут types класса ufunc
возвращает кортеж строк, каждая из которых
описывает допустимую комбинацию типов данных
для входных аргументов и возвращаемого значения
универсальной функции. Это позволяет узнать,
с какими типами массивов может работать функция
без потери точности или с автоматическим приведением
типов.
Синтаксис
ufunc.types
Атрибут не принимает параметров и возвращает
кортеж строк в формате, где каждый символ
обозначает тип данных: i - целое число,
f - число с плавающей точкой,
d - число с двойной точностью,
b - булев тип, O - объект.
Пример
Рассмотрим вывод атрибута для функции сложения
add:
import numpy as np
res = np.add.types
print(res)
Результат выполнения кода:
('??->?', 'bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L', 'qq->q', 'QQ->Q', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G', 'OO->O')
Каждая строка вида 'ii->i' означает,
что функция принимает два целочисленных аргумента
и возвращает целочисленный результат.
Пример
Получим поддерживаемые типы для функции
возведения в квадрат square:
import numpy as np
res = np.square.types
print(res)
Результат выполнения кода:
('b->b', 'B->B', 'h->h', 'H->H', 'i->i', 'I->I', 'l->l', 'L->L', 'q->q', 'Q->Q', 'f->f', 'd->d', 'g->g', 'F->F', 'D->D', 'G->G', 'O->O')
Здесь каждая строка вида 'f->f' означает,
что функция принимает один аргумент типа float
и возвращает значение того же типа.
Пример
Используем атрибут types для проверки,
поддерживает ли функция add работу
с булевыми значениями:
import numpy as np
types = np.add.types
has_bool = any(t.startswith('?') for t in types)
print(has_bool)
Результат выполнения кода:
True
Функция add действительно поддерживает
булевы типы, о чём свидетельствует строка
'??->?'.