【Python】关于import module语句
在发布的python your grasshopper_02视频中对import module语句有比较详细的解读,部分朋友还不是很理解,所以特意写此篇专栏。
一、我的困惑
个人开始学习导入模块内容时,经常看到如下内容:
import<模块名>:通过这种方式会导入模块的所有代码元素,在访问时需要加前缀“模块名”。
from<模块名>import<代码元素>:通过这种方式会导入模块中的x变量,在访问时不需要加前缀“模块名”。
·以上两种方式后加as <别名>,可以给模块起一个别名。
看到以上内容,有两个问题一直困扰着我:
两种方式为什么一个需模块名作前缀,而另一个不用?
起了别名后为什么原名不能再用了?
为什么起别名?
带着这两个问题,查阅了不少文章,也浏览了很多视频,不知过了多久,拼凑出了一个自己认为比较完整的答案,我相信有些初学者也会有这样的困惑,所以把它分享在我开头所说的视频里。
二、我的解答
import后的模块名实际是一个变量,名字和模块文件同名,是因为便于查找这个名字的模块文件并让文件和这个变量对应关联;
关联后,可以对这个变量名更改,这本身就是变量之所以称为“变”量的原因,即同一个对象,不同程序员可以各自对其起不同名称;
和生活中的“别名”有所不同,别名“齐天大圣”大家都知道是指孙悟空,而程序中一个对象只能有一个变量名和其对应,所以给模块起别名可以理解为给模块改名字,有了新的名字,原来的名字和这个对象的对应关系就断掉了;
至于为什么起别名,一是可以简化过长的名字;二是避免原名重名,尤其导入方式二产生重名的几率较大。
对一个变量操作肯定是要写出这个变量名;上述导入方式2讲不用模块名作前缀,因为变量名没和模块建立对应关系,而是和import后变量所代表的class或method建立了对应关系,使用它责写代表它的变量名。
对4项也可以这样理解:和生活中叫一个人做事先喊他名字一样,叫一个module或class做事也要叫它名字。导入方式一,导入的是模块,所以要喊出模块名,然后访问其包含的功能。导入方式二导入的是class或method,所以就直接喊它的名字,它所在的module文件没有变量和其建立联系,所以你也不知道它的名字,就是说不用module作为前缀。
以上内容希望对初学者有所帮助,也愿意抛出我的观点和各大佬交流学习。