Python 导包
python语言的使用者对导包应该不会陌生,下面我们就一起看一下python中有哪些到爆方式
1、Import
直接使用import进行导包是一种很常见的方式,每次可以导入一个或多个包,直接使用import导包相当于是导入了这个模块的整体,这个模块包含的所有对象都可以调用,但是要使用模块内部的方法或者其他对象不能直接调用,调用方式如下:module.func(),图中的代码也验证这点。
2、From xx import yy
区别import的全量导入方式,from xx import xxx,更像是精准导入,需要使用什么对象就导入什么对象,导入的对象可以直接调用,不需通过包名来调用,说道这里,有的人会问我既想可以直接调用导入的函数又想一次导入包内的所有对象该怎么办呢?放心,这不是问题,我们可以使用 from xxx import * 来导入包内的所有对象,这样就可以了,如图,time、ctime、clock都是time包内的函数。
3、循环引用
导入使我们可以方便的调用定义在其他文件中的对象,便于我们开发,但与此同时也会产生一些有导入引起的bug,那就是循环引用,何为循环引用呢,简单来说就是想入导入,eg:在文件A中导入文件B中的对象,又在文件B中导入文件A中的对象,这就会造成循环导入,导致代码报错,如图所示,这就是典型的循环导入。既遇到问题就要解决,真对循环导入的问题我们有两种解决方法。
方法一:中间文件,我们创建一个中间文件c,在文件c中进行导入操作,执行代码。
方法二、在调用出导入,及其中一个文件不再开始导入需要使用的对象,而是在调用的地方在导入,如图:
4、导包路径
既然是从别的地方导入那就一定涉及路径的问题,不然怎么找到你要导入的对象,在导入的过程中出了循环引用造成的异常之外,另一个常见的异常就导包路径不存在,遇到这种情况该怎么办呢?其实我们是可以通过代码修改导包路径的,这里主要是使用sys模块,如下图,当我清除默认导包路径的时候,导包会报错误:
再导包时候,python会自动按照sys.path中的路径去进行搜索,当在所有路径中都搜索不到的时候就会报出异常,同样的我们也可以主动添加搜索路径。
5、importlib.import_module()
除了上面说的两种常见的导包方式,还有这种不是很常见的导包方式,这里只展示一下使用,
如图:
6、单例模式
之前的文章里面有讲过单例,其实在python里面的import就是一种单例模式,相同的import语句实际上只会执行一次,如图: