python中的对象_Python一切皆对象

一.python中的一切皆是对象

1.编译型语言和解释型语言的区别:

1.1编译型语言:

需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

1.2解释型语言:

解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。

优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

2.python中函数和类也是对象,属于python的一等公民:

2.1.函数和类可以赋值给一个变量:

1 #一切皆对象

2 def fun_test(name="haha"):3 print(name)4 #函数赋给变量是并实列化

5 my_name=fun_test6 print(isinstance(my_name,object))7 my_name("LYQ")

从结果可以看出,函数也是对象

1 classCla_test:2 def __init__(self, name="haha"):3 print(name)4

5

6 cl =Cla_test7 print(isinstance(cl, object))8 cl(name="LYQ")

2.2可以添加到集合对象中:

1 def fun_test(name="haha1"):2 print(name)3 my_name =fun_test4 classCla_test:5 def __init__(self, name="haha2"):6 print(name)7 obj_list=[]8 obj_list.append(fun_test)9 obj_list.append(Cla_test)10 for i inobj_list:11 print(i())

实列化打印,None是函数无返回值。默认返回None,<__main__.cla....>

2.3可以作为参数传给函数:

defprint_type(fun_test):

fun_test()print(type(fun_test))

print_type(fun_test)

2.4可以当作函数的返回值:

#也就是一个很简单的装饰器

defdecorator_test():print("开始")returnfun_test

dec=decorator_test()

dec("hahaha")

二.type,object,class之间的关系

1.type——>int——>1 (type——>class——>obj):

可以很容易看出,class,list,int,str等类都是基于type类的,既是对象(type的对象),也是类,而对象1,'abc',[1,2]等各自基于int,str,list等类。

2.object是最顶层基类:

所有类的最底层基类都是object,如果类不继承其他的,默认继承object。

3.type也是一个类,同时是一个对象:

type把一切变成对象(包括自己【通过指针实现】),一切类最底层基类又都是object【type继承object,object是type的实例】。

三.python中的常见类型

1.对象的三个特征:

1.1身份(对象在内存中的地址,可以通过id这个函数查看):

1.1.1不可变对象:

不可变对象是指对象的内存值不能被改变。Python中变量以引用的方式指向对象,如果变量引用了不可变对象,当改变该变量时,由于其所指的对象的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址,即变量引用了新的对象。

数值类型(整数和浮点)、字符串str、元组tuple都是不可变类型。比如a=1,b=[1],c={'a':1},id(a)、id(b[0])、id(1)、id(c['a'])将输出一样的值,因为1是不可变对象,其在内存中是不可改变的。

1.1.2可变对象:

可变对象是指对象的内存值可以被改变,变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的内存地址,通俗点说就是原地改变。列表list、字典dict、集合set是可变类型。

1.2类型:

如int,str,list,dict等等

1.3值:

即具体的值。

2.None(全局只有一个):

Python在解释器启动时会用None类型实列化一个None对象。

3.数值:

int,float,complex(复数),bool

4.迭代类型:

可以遍历。

5.序列类型:

list,bytes、bytearray、memoryview(二进制序列),range,tuple,str,array

6.映射(dict):

key-value

7.集合(实现原理和dict差不多,效率高):

set,frozenset(不可修改)

8.上下文管理类型(with)

9.其他:

模块类型(from,import),class和实例,函数类型,方法类型,代码类型(代码本身会被Python解释器变成一个对象类型),object对象,type类型,ellipsis类型(省略号),notimplemented类型(高级设计时)

四.参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值