• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

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

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

一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。

相关文章