全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

编程中为什么要把一些变量私有?

来源:千锋教育
发布人:xqq
2023-10-19

推荐

在线提问>>

一、编程中要把一些变量私有的原因

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,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

相关文章

什么是泛型?

webpack的loader和plugin有什么区别?

Android传值Intent和Bundle区别?

Bootloader是什么,U-boot是什么?

WSGI到底是什么?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取