Java 和 Python 的包:此包是彼包否?

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

Java里的包机制:

包机制是为了解决类太多产生的类管理问题。 类一多,就不方便去找到自己需要的类,也不便于项目的管理。 因此,在 Java 中,我们把功能上相近的类放在同一个包里。 然后这些类的代码第一句话,就要告诉大家我这个类是属于哪个包的:

package 包名;
复制代码

在命名上,也比较讲究,一般用公司的域名分块,然后倒过来。

举例:我的公司名字叫 小匚科技,域名是 www.ftech.com

那么我这家公司的包名的前缀,就是com.ftech.www 。假如有个项目下,叫 网页端项目,包名就是:com.ftech.www.page

类在包下的一些同名问题,和文件夹下的同名文档问题是一样的。如果有过 Windows 电脑使用经验的朋友就可以很快理解这种机制。

同一个文件夹下不允许有同名文档————同一个包下面不能有同名类;

不同的文件夹下可以有同名的文档————不同的包下面,类同名了也没关系。

如果你不凑巧,在一个代码文件内,涉及到了两个不同包但同名的类,那么使用时,就通过加前缀的方式来告诉程序,哪个类是从哪个包导的。这种解决方式,也用在 SQL 查询两张表有相同字段的时候,就在字段前各自加上表名。

导包:

import com.ftech.www.page;
复制代码

Python 里的包机制:

Python 不像Java一直强调自己的类包一切。Python 里的面向对象思想,更多是通过 模块 来实现的。每个 .py 文件就可以通过被其他 .py 文件import来调用。

导包:

import numpy as np   # 默认都这样缩写
import pandas as pd
复制代码

共同点

这两个语言中,“*”都要慎用。一方面降低了编译速度(你不告诉程序到底找谁,它就会一个个挨着找,或者把人都叫过来),另一方面说明你并不清楚程序到底要用哪一个模块或者类。 再者,下面这种写法会有函数名冲突的风险:

from numpy  *
from pandas import *
from tensorflow import *
复制代码

本质上都是为了解决代码量起来以后,代码块的组织管理问题。 这种对部分代码的封装,能更好的实现“低耦合高内聚”:

  • 即单一模块内实现的功能(方法)要高度相关————高内聚;

  • 模块和模块之间的干扰、关联(接口)要尽可能的少————低耦合。

其实这个短语在写单独的课程作业,甚至在刷算法题也体会不到。只有到了实际的项目里,看到其他人的代码,你才会真的明白代码之间不受干扰的重要性,以及多导一个包、少导一个包有什么区别。我在实习的时候,还专门有一天的时间排查自己的每个代码文件,有没有导入多余的包。

猜你喜欢

转载自juejin.im/post/7016696029072326692