简介:type() 函数可以对数据的类型进行判定。
isinstance() 与 type() 区别:
1
2
3
|
type () 不会认为子类是一种父类类型,不考虑继承关系。 isinstance () 会认为子类是一种父类类型,考虑继承关系。 如果要判断两个类型是否相同推荐使用 isinstance ()。 |
type函数结果举例,主要有六大类:
1、标准数据类型。
2、module模块类型:主要来源于模块安装并使用
3、type类型:主要来源于标准数据类型的类对象
4、程序员新增的类,自定义的类型:<class ‘main.XXX’>、NoneType
5、builtin_function_or_method 内置函数或者方法
6、其他拓展类型如:collections.Counter、collections.deque等
源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
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、判定生成器类型等
源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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) |
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/hzblucky1314/article/details/122659446