Python: более элегантный способ определения типа ввода функции

#python #function #if-statement #types

#python #функция #if-оператор #типы

Вопрос:

Я полный новичок в Python… В настоящее время я пытаюсь написать функцию, которая сначала проверяет, являются ли входные данные x и y int или float .

Я предполагаю, что выполняет эту работу

if (type(x) != int and type(x) != float) or (type(y) != int and type(y) != float):

Однако мне это кажется довольно неуклюжим / неэффективным, и его будет трудно обобщить в случае большого количества входных данных. Поэтому я думаю, что должен быть более элегантный способ записи этого условия ..? Спасибо за любые идеи!

Комментарии:

1. Используйте isinstance() .

2. Большое вам спасибо за ответы, функция isinstance() — это именно то, что я искал!

Ответ №1:

Используйте isinstance :

 if not isinstance(x, (int, float)) and not isinstance(y, (int, float)):
    # do something..
  

Ответ №2:

Используйте isinstance

 if not isinstance(x, (int, float)) or not isinstance(y, (int, float)):
  

Ответ №3:

использование isinstance — см. Пример кода ниже

https://www.programiz.com/python-programming/methods/built-in/isinstance

 def foo(x, y):
    if isinstance(x, (int, float)) and isinstance(y, (int, float)):
        print('great input')
    else:
        print('wrong input')
  

Ответ №4:

вероятно, наиболее общим способом является использование базового класса из numbers модуля:

 from numbers import Number

if isinstance(3.3, Number):
    ...
  

небольшое предостережение: это также будет принимать комплексные числа (например 2 4j ). если вы хотите избежать этого:

 from numbers import Real, Integral

if isinstance(3.3, (Real, Integral)):
    ...