Как мне питонически делать:
var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or isinstance(var, classinfoN)
Кажется глупым, я не могу просто передать список classinfo:
var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )
Так в чем же isinstanceofany
функция?
python
types
isinstance
Д. Адамс
источник
источник
number
ИЛИ, оно возвращает симпатичное выражение)). Я хочу проверить, что сгенерированная мной функция выполняет то, что должна делать, когда я передаю ее другим функциям.Ответы:
isinstance()
в качестве второго аргумента принимает кортеж классов. Он вернет истину, если первый аргумент является экземпляром любого из типов в этой последовательности:Другими словами, он
isinstance()
уже предлагает эту функциональность из коробки.Из
isinstance()
документации :Акцент мой; обратите внимание на рекурсивный характер;
(classinfo1, (classinfo2, classinfo3))
также допустимый вариант.источник
Вы уже довольно близко подошли к названию своего вопроса. Вы можете использовать
any
и список:var = 7.0 var_is_good = any([isinstance(var, classinfo1), isinstance(var, classinfo2), isinstance(var, classinfo3), ... isinstance(var, classinfoN)])
Но глядя в документацию,
isinstance
обнаруживается:Это означает, что лучший способ сделать это -
var = 7.0 var_is_good = isinstance(var, (classinfo1, classinfo2, classinfo3, ..., classinfoN))
источник
isinstance
только сclassinfo
изменением мне не кажется очень питоническим.var.__class__
. Это то, что вы хотите? @Makoto: Согласен. Совсем не Pythonic!any()
со списком .. бессмысленно. Используйте выражение генератора, если вам необходимо его использоватьany()
, тогда вы , по крайней мере, получите преимущество раннего выхода.isinstance
с кортежем - это путь. Я просто хотел упомянуть решение,any
которое, похоже, было именно тем, о чем он просил в названии.Это решит вашу проблему:
Судя по документации, существует множество способов передачи значений типов
isinstance
.Вы также можете обратить внимание на сладострастие, если пытаетесь провести более сложную проверку, и это лишь часть.
источник
Обычно вы не должны использовать
isinstance
, но то, что вы хотите сделать, может быть выполнено с помощью встроенной функции any () .var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])
источник
isinstance()
предлагает функциональность из коробки без использованияany()
.isinstance()
.isinstance()
? Спасибо.