1 概述
Python3 中有六个标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
- Set(集合)
六个标准数据类型中:
- 不可变数据类型有:Number、String、Tuple
- 可变数据类型有:List、Dictionary、Set
2 类型判断
内置的 type() 函数可以用来查询对象的数据类型。此外,还可以用 isinstance() 函数来判断。
print(type(111)) # <class 'int'>
print(type('111')) # <class 'str'>
print(type([1, 1, 1])) # <class 'list'>
print(type((1, 1, 1))) # <class 'tuple'>
print(type({'key1': 111})) # <class 'dict'>
print(type(set((1, 1, 1)))) # <class 'set'>
print(isinstance(111, int)) # True
print(isinstance('111', str)) # True
print(isinstance([1, 1, 1], list)) # True
print(isinstance((1, 1, 1), tuple)) # True
print(isinstance({'key1': 111}, dict)) # True
print(isinstance(set((1, 1, 1)), set)) # True
type() 和 instance() 的区别在于:
- type() 不会认为子类是父类类型
- isinstance() 则会认为子类是父类类型
在 Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加,True=1, False=0。但可以使用 is 关键字来判断这两者。 |
类 | 简介 |
isinstance(object, classinfo, /) | 如果参数 object 是参数 classinfo 的一个实例,或者是其(直接、间接或虚拟)子类,则返回 True。如果 object 不是给定类型的一个对象,则函数返回 False。如果 classinfo 是类型对象的元组(或递归地,其它此类元组)或多个类型的联合类型,则如果 object 是这些类型的任何一个实例,返回 True。如果 classinfo 不是一个类型或类型的元组和其它元组,则会产生一个 TypeError 异常。如果一个非法类型在之前检查成功,则可能不会产生 TypeError。 |
type(object, /) type(name, bases, dict, /, **kwds) | 传入一个参数时,返回 object 的类型。返回值是一个 type 对象,通常与 object.__class__ 所返回的对象相同。推荐使用 isinstance() 内置函数来检查对象的类型,因为它会考虑子类的情况。 传入三个参数时,返回一个新的 type 对象。这在本质上是 class 语句的一种动态形式,name 字符串即类名,并会成为 __name__ 属性;bases 元组包含基类并会成为 __bases__ 属性;如果为空则会添加所有类的终极基类 object。dict 字面包含类主题的属性和方法定义;它在成为 __dict__ 属性之前可能会被拷贝或包装。 |
3 逻辑值检测
任何对象都可以进行逻辑值的检测,以便在 if 或 while 作为条件或是作为布尔运算的操作数来使用。
一个对象在默认情况下均被视为真值,除非当该对象被调用时其所属类定义了 __bool__() 方法且返回 False,或是定义了 __len__() 方法且返回零。下面基本完整地列出了被视为假值的内置对象:
- 被定义为假值的常量:None 和 False。
- 任何数值类型的零:0、0.0、0j、Decimal(0)、Fraction(0, 1)。
- 空的序列和多项集:''、()、[]、{}、set()、range(0)。