python最具特色的是用什么写模块_Python模块和包-你还在全部写成一坨吗?

在使用Python开发程序时,如果是比较复杂的功能,可以把功能分成几个部分,则需要用到Python的模块和包。

70b2f7a1c17ecd4ff9e14b7a0c33322b.png

模块

顾名思义,模块就是一块一块的代码。

Python模块

在Python中一个py文件被认为是一个模块(module)。

db6e361824588de6af6232b41606a2c6.png

导入模块

导入一个模块到当前模块,语法:

import_smt ::= "import" module ["as" name] ("," module ["as" name])*

| "from" relative_module "import" identifier ["as" name]

("," identifier ["as" name])*

|"from" relative_module "import" "(" identifier ["as" name]

("," identifier ["as" name])* ["," "]"

|"from" module "import" "*"

import_stmt表示import语句

双引号""标明的是关键字

方括号[]表示可选输入

竖线|表示或者

小括号()和星号*合在一起使用,表示可以为若干小括号里的内容

综上所述,import语句有4种写法。

"import" module["as" name](","module["as"name])*

直接在import后面加模块名字,并且名字可以使用关键字as自定义。

5d8cc38a1ac2ab796be4cef8a95d460f.png

724df15432989c01f2e7e27b68cfde96.png

"from" relative_module "import" identifier["as" name] ("," identifier["as" name])

增加了from关键字

14307a24206bb024cd33d02791b8e2f6.png

"from" relative_module "import" "("identifier ["as“ name](","identifier["as" name])*[","]")"

类似法二,只是在import后加上括号,对导入部分用原则进行特别说明。

4e7c1589056ceb2dc99302fe6591d99f.png

"from" module "import" "*"

将一个模块下的所有成员都导入到当前模块。

496f9d16429e910c07ab19edbc2d4b24.png

查找模块

当import一个模块时,Python要去哪里查找模块文件呢?

Python查找模块有3步:

在当前目录种查找

若没有找到则从环境变量PYTHONPATH中查找

若仍没找到则到安装目录中查找

实际上要将查找目录的信息存放到sys模块的path变量中,可以打印改变了来查看Python的查找目录。

934137d7510d9bd86b6efcf5b04a502b.png

从查找顺序上看出,当前目录是第一优先查找,所以尽量不要使用标准库中已存在的名字,避免Python使用该文件取代标准库的模块。

模块编译

Python执行程序实际上有一个些许你机制,当运行Pyhton模块文件时,Python会将后缀名为.py的模块文件编译成后缀名.pyc文件,实际解释执行编译之后的.pyc文件,类似Java,以此提高装载速度。

除了编译成.pyc字节码文件外,向Python解释器传递两个-O参数(-OO)会生成优化的字节码.pyo文件。pyo文件比pyc文件装载速度更快,可以提高Python脚本启动速度。不过需注意的是,压缩的pyo文件删除了py文件里用来存放注释的__doc__属性,所以用到__doc__属性则不能使用该优化方法。

程序代码太多可以分成多个模块,而当模块太多可以组合成一个包。

Python包

模块是一个Python文件,包是一组模块的集合,即包是放着若干Python文件的目录,并且该目录下有一个__init__.py文件(包的初始化文件),可以在该文件里导入包里的所有Python模块。

创建包

32f5b06c7a969b636fdec06848c3f3c1.png

0184a2005fe0ac57acbcf7563466a0be.png

添加模块

17f0a12464d7b72ff1f39cf4ae0238dc.png

5ff087e28028c3763052978a64f07775.png

调用包

7cd4430f1105d73af25a09774c5b8784.png

包的导入

包的导入和模块的导入语法规则一样,例如:

8f9c814550d48f19ad77fa250ac36696.png

但是和模块导入不同是第4种带星号的用法。

from mypackage import *理想情况下会找出包的所有子模块并导入,但实际情况并非如此。Python会在初始化文件里按照一个名为__all__的列表,导入该列表给出的模块名。

比如定义__all__列表:

fd69c7e5f0a770efa1b5c544c8741346.png

6670779bcc8b86e606a235a8d2be21e1.png

__all__可以看作是包的索引,在编写Python时,建议在__init__.py文件明确定义_-all__列表。

内嵌包

对于功能更复杂的程序,可以用内嵌包,即一个大包套着若干子包,每个子包又包含若干模块。

比如Python处理XML的标准库就包含了四个子包:

429ca209fc0e11baab5357317f8a84e6.png

对于内嵌包的使用,另外注意的是在装载模块时要使用包和模块的全名,即指出是哪个包的模块。如:

3db2605bf5296ce9d3ecdc29b5e4579e.png

原创不易,请勿转载(本不富裕的访问量雪上加霜 )

博主首页:https://wzlodq.blog.csdn.net/

微信公众号:唔仄lo咚锵

如果文章对你有帮助,记得一键三连❤

本文同步分享在 博客“唔仄lo咚锵”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值