
isinstance() 与 type() 区别:
type函数结果举例,主要有六大类:
总结
简介:type() 函数可以对数据的类型进行判定。
isinstance() 与 type() 区别:type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
type函数结果举例,主要有六大类:
1、标准数据类型。
2、module模块类型:主要来源于模块安装并使用
3、type类型:主要来源于标准数据类型的类对象
4、程序员新增的类,自定义的类型:<class ‘main.XXX’>、NoneType
5、builtin_function_or_method 内置函数或者方法
6、其他拓展类型如:collections.Counter、collections.deque等
源码:
import time
import random
import asyncio
import collections
# 基本数据类型
print(type(1)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("hello")) # <class 'str'>
print(type([1, 2])) # <class 'list'>
print(type((1, "a"))) # <class 'tuple'>
print(type({"name": "tom"})) # <class 'dict'>
print(type(False)) # <class 'bool'>
print("*" * 30)
# <class 'module'>
print(type(time))
print(type(random))
print(type(asyncio))
print("*" * 30)
# <class 'type'>
print(type(type))
print(type(int))
print(type(float))
print(type(bool))
print(type(str))
print(type(dict))
print(type(list))
print(type(tuple))
print(type(set))
print("*" * 30)
# 自定义的类型:<class '__main__.XXX'>
class A:
x = 111
def __init__(self):
self.x = 1
def run(self):
pass
@staticmethod
def say():
pass
@classmethod
def live(cls):
pass
@property
def sleep(self):
pass
a = A()
print(type(A)) # <class 'type'>
print(type(object)) # <class 'type'>
print(type(a)) # <class '__main__.A'>
# <class 'NoneType'>
print(type(a.__init__()))
print(type(a.run()))
print(type(a.say()))
print(type(a.live()))
print(type(a.sleep))
print(type(A.x)) # <class 'int'> 与初始值类型一致
print(type(a.x)) # <class 'int'> 与初始值类型一致
print("*" * 30)
# <class 'builtin_function_or_method'>
print(type(None))
print(type(bin))
print(type(len))
print(type(min))
print(type(dir))
print("*" * 30)
data = "message"
result = collections.Counter(data)
dict1 = collections.OrderedDict({"name": "Tom", "age": 25, "address": "CN"})
deq1 = collections.deque("abc")
print(type(result)) # <class 'collections.Counter'>
print(type(dict1)) # <class 'collections.OrderedDict'>
print(type(deq1)) # <class 'collections.deque'>
实际应用举例:
1、判定是否是lambda类型
2、判定是否是函数类型
3、判定是否是方法
4、判定生成器类型等
源码:
from types import LambdaType, MethodType, GeneratorType, FunctionType, BuiltinFunctionType
test1 = lambda x: x + 1
# 判定是否是lambda类型。需要注意的是lambda就是函数类型,本质是一样的
print(type(test1) == LambdaType) # True
# 判定是否是函数类型
print(type(test1) == FunctionType) # True
# 判定是否是内置函数类型
print(type(bin) == BuiltinFunctionType) # True
class Test2:
def run(self):
pass
test2 = Test2()
# 判定是否是方法
print(type(test2.run) == MethodType)
# 判定生成器类型
a = (x * x for x in range(1, 10))
print(type(a) == GeneratorType)
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注易知道(ezd.cc)的更多内容!