В документации объединенных типов эти проверки представлены как:
if name_of_fused_type is double
not
if name_of_variable is double:
В вашем случае это будет:
if number_or_arr is double:
(а затем аналогичные изменения для двух других проверок). Проблема с вашей текущей версией заключается в том, что она неоднозначна - для случая int
он может запрашивать проверку, является ли он int
, или он может запрашивать проверку, что n
является объектом типа Python, точно равным к типу Python int
.
В стороне, я думаю, что будет сложно ускорить «может быть числом, может быть массивом», как это - вы бы вероятно, лучше всего оставить их нетипизированными. Cython и массивы лучше всего подходят для ускорения индексации, чего здесь нет (потому что это может быть число)