Python深入理解① 一切皆对象
静态语言与动态语言
静态语言:代码在编译的时候变量数据类型确定的,大部分静态语言在编写的过程中就要定义好数据类型
动态语言:代码是运行的时候变量数据类型确定的,变量可直接赋值而不用定义类型
静态语言优势:可以很容易看出,静态语言由于数据类型是定死的,使得它的优势变现为IDE更容易发现错误,对接第三方包的时候也更容易知道获取数据的类型,不容易被不知道的情况下被赋值不同数据类型的数据,从而减少了一定侵害性
动态语言优势:能够减少定义代码变量数据类型定义、更具有灵活性,可以把更多的精力花在业务逻辑上。
函数和类也是对象
具有以下几个特性:
- 可以直接赋值给一个变量
- 可以添加到集合对象中
- 可以作为参数传递给函数
- 可以当做函数的返回值
注:()代表函数运行
Type、Object、Class的关系
a=1
b="abc"
print(type(1)) # <class 'int'>
print(type(int)) # <class 'type'>
print(type(b)) # <class 'str'>
print(type(str)) # <class 'type'>
print(type(object)) # <class 'type'>
print(type(type)) # <class 'type'>
print(type.__bases__) # (<class 'object'>,)
print(object.__bases__) # ()
print(int.__bases__) # (<class 'object'>,)
print(str.__bases__) # (<class 'object'>,)
由上面的输出结果我们可以明显看出 type->int->1, type->str->“abc”,即type->class->object,而type也是属于type,type的基类是object,object基类是空集,int,str的基类也是object,因此可以用一张图来表示。
Type把Type也能够自己实例化,所以Python把一切都变成了对象,全部都继承object这个基类。
Python中常见的内置变量
None: None对象全局只有一个
a = None
b = None
print(id(a) == id(b)) # True
数值类型:int、float、complex(复数)、bool
迭代类型:可以进行迭代、for循环
序列类型:list、bytes、array、tuple、str、array
映射类型:dict
集合类型:set、frozenset(不可修改set)
上下文管理类型:with
其他类型:模块类型、函数类型、方法类型、class和实例、代码类型、Object类型等等