所有python的`__builtin__`数据类型的列表在哪里?

时间:2016-08-08 13:52:42

标签: python variables

我正在使用比较:

if type( self.__dict__[ key ] ) is str \
    or type( self.__dict__[ key ] ) is set \
    or type( self.__dict__[ key ] ) is dict \
    or type( self.__dict__[ key ] ) is list \
    or type( self.__dict__[ key ] ) is tuple \
    or type( self.__dict__[ key ] ) is int \
    or type( self.__dict__[ key ] ) is float:

我曾经发现,我错过了bool类型:

or type( self.__dict__[ key ] ) is bool \

好的 - 我想知道我错过了哪些其他类型?

我开始谷歌搜索:

  • diveintopython3

      

    Python有许多本机数据类型。以下是重要的内容:

    1. 布尔是正确还是错误。
    2. 数字可以是整数(1和2),浮点数(1.1和1.2),分数(1/2和2/3),甚至是复数。
    3. 字符串是Unicode字符的序列,例如一个HTML文档。
    4. 字节和字节数组,例如一个jpeg图像文件。
    5. 列表是有序的值序列。
    6. 元组是有序的,不可变的值序列。
    7. 集合是无序的价值袋。
    8. 字典是无序的键值对。

为什么到处都有人在谈论多种类型,但我找不到所有这些类型的列表?它几乎总是只有重要的

1 个答案:

答案 0 :(得分:2)

您可以对__builtin__的{​​{3}}进行迭代,并使用__dict__查看某些内容是否属于某个类:

builtins = [e for (name, e) in __builtin__.__dict__.items() if isinstance(e, type) and e is not object]
>>> builtins
[bytearray,
 IndexError,
 SyntaxError,
 unicode,
 UnicodeDecodeError,
 memoryview,
 NameError,
 BytesWarning,
 dict'
 SystemExit
 ...

(请注意,正如@ user2357112在优秀评论中指出的那样,我们明确排除了object,因为它没用。)

另请注意,isinstance可以将元组作为第二个参数,您可以使用它来代替您的if系列。因此,你可以这样写:

builtins = tuple([e for (name, e) in __builtin__.__dict__.items() if isinstance(e, type) and not isinstance(object, e)])
>>> isinstance({}, builtin_types)
True