2016-10-14 4 views
0

Я ищу способ поймать все функции типа std в Python (int, str, xrange и т. Д.).Проверьте, является ли переменная стандартной функцией в Python

В принципе, все, что имеет представление, которое выглядит как <type X> вместо <class X>. Вот полный список всех типов StD в Python 2: https://docs.python.org/2/library/stdtypes.html

Если я использую isinstance(X, type) или type(X) == type, он также перехватывает все классы, но я только хочу, чтобы обнаружить функции типа (или какие-либо имена, назначенные к одному из них (т.е. my_int = int).

Единственная мысль, которая приходит на ум моей проверки, если X.__name__ в __builtins__, но я не уверен, что это чистое и не правильное решение.

+0

Не могли бы вы объяснить, что вы на самом деле пытаетесь достичь, и почему? – jonrsharpe

+0

Вы можете указать их явно ... 'isinstance (x, (list, dict, set, unicode, str, ...))' или 'x in {list, dict, set, unicode, str, ... } '. Из любопытства, _why_ имеет значение, если что-то это встроенный тип или нет? – mgilson

+0

Я мог бы перечислить их всех, так как есть конечное число, но я надеялся избежать этого. Я пытаюсь поймать любую примитивную функцию типа. Я не думаю, что в Python можно создать более примитивные типы? Так что единственные, которые когда-либо будут существовать, - это встроенные. Все остальное будет классом. –

ответ

0

что вы предложили кажется, хорошо для меня.

builtin = dir(__builtins__) 
def is_builtin(tested_object): 
    return tested_object.__class__.__name__ in builtin 

Помните, однако, что встроенные типы могут быть омрачены.

Update после комментария от Rob:

def is_builtin(tested_object): 
    return tested_object.__class__.__module__ == '__builtin__' 
+1

Или 'test_object .__ class __.__ module__ == '__builtin __''? –

+0

Действительно, это лучше! –

Смежные вопросы