简记Python导入包与模块
这是一篇Python小白关于包与模块的粗浅认知,用以加深理解。如有错误,请各位前辈多多指教
什么是包与模块
在Python中,我们可以把包与模块理解为文件夹与文件,但仅仅是这样理解,包与文件夹的区别就是包下会有一个__init__.py 文件 ,稍后我们对其进行一段解释。而模块中还包括有 类,变量,函数等元素。
导入包与模块的意义
当我们在完成一个项目的时候,会出现一个代码复用的问题,怎么办呢?再写一遍?这效率也太低了叭,也增加了代码的冗余。这个时候,我们就可以通过“导入”这一概念来解决这一代码复用问题
导入的方式
1- import 命名空间
2- from 包名 import 模块名
注:以上为导入自定义包与模块,样式灵活多变,但须遵循命名空间原则。导入就类似于你添加了哪个文件夹下的文件。(此处只是为了好理解,用以类比)
什么是命名空间
可以将其理解为路径,通过命名空间你可以找到你所导入的元素存在于哪个位置。可区分模块名相同的模块,打个比方说:你有两个不同的包,但其下都有一个“ojbk.py”的模块,这时就需通过命名空间这一概念来区分这两个模块
=====手动分割线=====
注:以下内容会有代码演示,所有使用导入的元素都以print的方式输出演示,具体可根据自己情况演示
okk,大体概念就这么多吧,下面我们来具体谈谈我对这两种导入方式的理解。
python导入包与模块
import 命名空间
这种导入方式的好处就是你可以直截了当的看见你所使用的类,变量,或者函数是来自于哪一个包的哪一个模块。也就是按级划分。
- 导入同一个包下的其他模块时,即模块与模块同属一个包下,(同一文件夹下的不同文件),只需导入模块名即可
- 举例;模块名为:cool,其下有变量 a = 19
import cool
print('cool.a')
输出 19 `
- 导入不同包下的模块时,即模块与模块不属于同一个包(不同文件夹下的文件),需导入包名.模块名
举例;包名为:hello,其下模块名:cab,其变量 d = 19
import hello.cab
print('hello.cab.d')
输出 19
- 用自定义标识符代替命名空间
用上一举例说明
import hello.cab as hc
print('hc.d')
输出 19`
注:即使所引用的模块命名空间再大也不可省略,可用自定义标识符代替 (如同你找文件时少一级路径)
from 包名.模块名 import 变量
注:这里所导入的不仅仅是变量,还可以是函数与类。上文亦同。
以下举例皆为上文所提
1.*导入具体的变量时,可直接使用
from hello.cab import d
print('d')
输出 19`
- *只导入模块名,使用其具体变量时:模块名.变量名
from hello import cab
print('cab.d')
输出 19`
- *导入多个变量时,用 * 代替,可理解为模糊匹配,
在cab模块中添加变量e=2,t=7
from hello.cab import *
print('d')
print('e')
print('t')
输出 19 2 7
- 在被导入的模块头部写入“all =[允许被导入的元素列表]” 即可规定允许该模块中哪些元素可以被引用
举例;
在cab模块下
__all__ = ['d','e']
当其他模块引用时
from hello.cab import *
print('d')
print('e')
print('t')
输出 19 2 报错没有t `
- 导入多个变量时,可用逗号隔开,当导入变量过多需要换行时,用括号将所有变量括住或在末尾用 \ (括号较为美观)此处就不举例了,应该通俗易懂。
- 以上就是我对Python导入库与模块的简单概述,接下来我们讲讲前面提到的“ init.py ”文件
- init.py文件的用法
- 当一个包被导入时,Python将首先自动执行该包下的__init__.py文件,(这个文件我们用该文件代替)所以我们可以用该文件做一些关于项目的初始化
- 同样,该文件也可使用__all__ =[可被导出的模块列表] 来决定允许该包下哪些模块允许被引用,和上文所述用法相同,只是提升了一个等级。
- 当多个模块需要导入相同的Python库,每个模块都导入显得冗余也麻烦,此时我们就可在该文件下先行导入这些Python库,模块中导入时只需导入该文件所对应的包即可,此处举个例子吧(手机操作太累了)(批量导入的作用)
- 以sys库下的version函数为例,hello包,先在该文件下import sys,模块导入时如下:
import hello
print('hello.sys.version ')
输出对应的版本信息
okk 以上便是我对包与模块,以及包下的__init__.py文件的粗浅理解,顺便再提一句包与模块的几个常见错误
包与模块的几个常见错误
- 包与模块不会被重复导入,即有多个模块导入模块a,但模块a被导入的操作只执行一次,而不是说每次导入该模块时都会执行导入操作
- 避免循环导入,比如有两个模块,模块a与模块b,此时模块a中导入了模块b,而模块b也导入了模块a,这样就形成了循环导入,多个模块之间相互导入也是如此。此时会报错,我们需要注意避免循环导入的问题
- 一旦导入一个模块,Python就会去执行该模块下所有代码,所以导入自定义模块时,需要做好类,函数,变量的封装。
=====手动分割线=====
以上为今天的分享内容,由于只精通Python的helloworld,所以如有纰漏或差错,请各位前辈多多指教!🙏