python的包与模块

简记Python导入包与模块

这是一篇Python小白关于包与模块的粗浅认知,用以加深理解。如有错误,请各位前辈多多指教
什么是包与模块
在Python中,我们可以把包与模块理解为文件夹与文件,但仅仅是这样理解,包与文件夹的区别就是包下会有一个__init__.py 文件 ,稍后我们对其进行一段解释。而模块中还包括有 类,变量,函数等元素。
导入包与模块的意义
当我们在完成一个项目的时候,会出现一个代码复用的问题,怎么办呢?再写一遍?这效率也太低了叭,也增加了代码的冗余。这个时候,我们就可以通过“导入”这一概念来解决这一代码复用问题
导入的方式
1- import 命名空间
2- from 包名 import 模块名
注:以上为导入自定义包与模块,样式灵活多变,但须遵循命名空间原则。导入就类似于你添加了哪个文件夹下的文件。(此处只是为了好理解,用以类比)
什么是命名空间
可以将其理解为路径,通过命名空间你可以找到你所导入的元素存在于哪个位置。可区分模块名相同的模块,打个比方说:你有两个不同的包,但其下都有一个“ojbk.py”的模块,这时就需通过命名空间这一概念来区分这两个模块

=====手动分割线=====

注:以下内容会有代码演示,所有使用导入的元素都以print的方式输出演示,具体可根据自己情况演示
okk,大体概念就这么多吧,下面我们来具体谈谈我对这两种导入方式的理解。
python导入包与模块
import 命名空间
这种导入方式的好处就是你可以直截了当的看见你所使用的类,变量,或者函数是来自于哪一个包的哪一个模块。也就是按级划分。

  1. 导入同一个包下的其他模块时,即模块与模块同属一个包下,(同一文件夹下的不同文件),只需导入模块名即可
  2. 举例;模块名为:cool,其下有变量 a = 19
import  cool
  print('cool.a')
 输出 19 `
  1. 导入不同包下的模块时,即模块与模块不属于同一个包(不同文件夹下的文件),需导入包名.模块名
    举例;包名为:hello,其下模块名:cab,其变量 d = 19
import hello.cab
  print('hello.cab.d')
  输出 19 
  1. 用自定义标识符代替命名空间
    用上一举例说明
import hello.cab as hc
  print('hc.d')
输出 19`

注:即使所引用的模块命名空间再大也不可省略,可用自定义标识符代替 (如同你找文件时少一级路径)
from 包名.模块名 import 变量
注:这里所导入的不仅仅是变量,还可以是函数与类。上文亦同。

       以下举例皆为上文所提

1.*导入具体的变量时,可直接使用

 from hello.cab import d
  print('d')
 输出 19`
  1. *只导入模块名,使用其具体变量时:模块名.变量名
from hello import cab
  print('cab.d')
  输出 19`
  1. *导入多个变量时,用 * 代替,可理解为模糊匹配,
    在cab模块中添加变量e=2,t=7
 from hello.cab import * 
 print('d')
 print('e')
 print('t')
 输出 19  2  7
  1. 在被导入的模块头部写入“all =[允许被导入的元素列表]” 即可规定允许该模块中哪些元素可以被引用
    举例;
    在cab模块下
    __all__ = ['d','e']
    当其他模块引用时
 from hello.cab import *
  print('d')
  print('e')
  print('t')
 输出 19  2  报错没有t `
  1. 导入多个变量时,可用逗号隔开,当导入变量过多需要换行时,用括号将所有变量括住或在末尾用 \ (括号较为美观)此处就不举例了,应该通俗易懂。
  2. 以上就是我对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,所以如有纰漏或差错,请各位前辈多多指教!🙏
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值