import module 与 from module import * 的区别

import module是最基本的导入语句,其作用是将一个模块导入当前的名字空间中,当需要该模块的一个属性或者方法及类时,必须通过模块的名称空间来获取。

from module import * 是对from module import 语句的增强,后者是将一个制定的名字导入到当前名字空间,前者是将模块中所有的可见元素的名字都导入当前名称空间。因为from module import语句的副作用是:

如果当前名称空间有一个元素的名字与被导入元素的名字同名,那这个元素将被后者覆盖

由此可知,from module import * 是及其危险的,如果不慎重使用,可能会导致当前名字空间的大量元素被偷梁换柱。

实际上,使用 from module import * 被认为是一个不好的风格,因为这种做法会“污染”当前名称空间,并有可能会覆盖掉当前域名空间中的名字。但另一方面,这种做法又具有极大的便利性,尤其在module很有多变量经常被使用或者module的名字非常长。

« 返回