编程中要把一些变量私有是因为:1、避免同名变量互相干扰(特别是多个人做同一个项目时);2、隐藏更多的细节,只需协商好接口参数,便于保密;3、有些语言中,私有变量是定义在堆(或栈)中的。
一、编程中要把一些变量私有的原因
1、避免同名变量互相干扰(特别是多个人做同一个项目时);
2、隐藏更多的细节,只需协商好接口参数,便于保密;
3、有些语言中,私有变量是定义在堆(或栈)中的,使用完成后可以释放掉,
例子:
设想我们开发一个类似手表的类,里面有个 GetLocalTime() 方法的功能是尽可能精确地获取当前时区的时间。一般使用这个类的其他程序员需求只有一个,获知当前时区的时间,可能用这个时间值来做一些其他的事情。如果我们丝毫不在乎这个类的包装,里面除了 GetLocalTime(),还有一大堆别的公开的方法,(随意编造的)如获取和连接GPS设备的方法、连接定位服务以及定位校准的方法、国际时区标准和有关协议对统一时间戳的计算方法、远程铯原子钟同步方法、双向反馈校准时差方法、各种延迟和错误处理机制的方法、各种事件监听方法等等等等。
首先其他使用这个类的开发者一般并不需要知道这个类内部是如何「尽可能精确地获取到当地时间的」,如果把这些全部暴露给其他开发者,那么就有潜在的危险:如果其他开发者错误的修改了某个铯原子钟同步的全局参数,那么所有开发者获取到的时间就都是错误的了;如果其他开发者过于频繁地直接访问内部连接GPS设备的方法,可能GPS并发连接数太多就崩溃了,使得这个类本身难以管理并发连接,限制用户对竞争性资源的可访问性;如果其他开发者设定参数时没有通过统一入口处理数据标准,使得不符合标准的参数传输到设备,导致设备障碍,也会造成系统的失败。
由此可见,良好设计的公有/私有封装可以避免掉上面的大部分问题,降低学习成本、提升可维护性。
延伸阅读:
二、内存池机制
在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
内存池概念
内存池的概念就是预先在内存中申请一定数量的,大小相等的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了之后再申请新的内存。这样做最显著的优势就是能够减少内存碎片,提升效率。内存池的实现方式有很多,性能和适用范围也不一样。
特性
Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。
对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。