python的脚本、模块、包、库

一、脚本(script)

1.定义:

脚本通常是可直接执行的代码段,由其自身运行。脚本中一般不包含类、函数等。

二、模块(module)

1. 定义

脚本通常是可直接执行的代码段,由其自身运行,模块里面定义了各种函数和类。任何Python模块都可以作为脚本执行。

脚本和模块的重要区别:一个模块当作为模块导入时,文件名用作模块名称的基础,而如果将其作为脚本执行,则模块名为__main__。

2.好处

当作为模块导入时,文件名用作模块名称的基础,而如果将其作为脚本执行,则模块名为__main__。

3. 模块的导入方式

3.1 import
3.2 from模块名 import 成员名

尽量不要使用:from demo import *, 因为这种方式很容易出现名称重复

4. if name == ‘main’:

python模块完成之后,我们需要对模块中的功能进行测试,看看模块的各功能是否正常运行。对于测试代码,我们希望只在直接运行这个py文件时执行,在用其他程序import这个模块的时候不要执行。这时候需要借助python内置的__name__变量。
__name__变量的取值分两种情况

  • 当一个模块被直接运行时,name__变量的值为__main
  • 方一个模块被import到其他程序,其他程序运行时,该模块里面的__name__变量的值为运行程序的文件名

因此,可以利用__name__变量结合if语句,让我们实现import某一个模块时,只用模块提供的功能,而不运行模块里面的测试代码:

if __name__ == '__main__':
    # test code

5. 模块的说明文档:

模块的说明文档一般以注释的形式放在.py文件的开头,具体格式如下

'''
模块说明文档
'''

可以用模块的__doc__属性来访问模块的说明文档:

import test
print(test.__doc__)

6. 模块的路径

用import语句导入的模块,python会按照以下路径顺序查找需要的模块:

  1. 当前工作目录;
  2. PYTHONPATH(环境变量)中的每一个目录;
  3. python默认的安装目录

如果导入自己写的模块时,路径设置的不对,python解释器会提示找不到这个模块:

ModuleNotFoundError: No module named '模块名'

以上三类目录都保存在标准模块sys的sys.path变量中

解决模块路径不对的三种方法:

  1. 向sys.path变量中临时添加模块文件所在的完整路径
import sys
sys.path.append(r'D:\xxx\yyy')
  1. 将模块移到sys.path变量已经包含的路径中
  2. 修改path系统的环境变量
    • 修改用户变量(仅对当前用户生效)
    • 修改系统变量(对系统所有用户生效)

python使用path环境时,会先按照系统path变量找,然后按照用户path变量的路径找

三、包(package)

3.1定义

装了一个__init__.py(python3.3以后可以不包含该文件,但是最好还是放如该文件),且含有多个模块的文件夹子。

3.2好处

大型项目中用于管理项目中用到的大量模块

3.3 init.py文件的性质

  • 它本身是一个模块
  • 这个模块的名字不是__init__,而是这个包的名字,也就是装着__init__.py文件的文件夹的名字
  • 他的作用是将一个文件夹变成python模块
  • 该文件可以不包含代码,不过此时仅仅用import [该包]形式是什么也做不了的。所以一般会包含一些Python初始化代码,在这个包被import的时候,这些代码会被自动执行。
    4.1 初始化代码类型一:批量导入我们需要用到的模块,这样我们就不同在用到的时候再一一导入,方便实用。
    4.2 如果我们要使用“from package import *”的形式导入一个模块的所有内容,则需要在__init__.py文件中加上"all = [‘file_a’, ‘file_b’]"。其中,package下有file_a.py, file_b.py文件。
    4.3 不建议在__init__.py中写类,以保证py文件简单。

__all__是python中的一个重要变量,放在__init__模块中,用于指定该包被import*时,哪些模块会被import进当前作用域中。不在__all__列表中的模块不会被其它程序引用。我们可以对__all__进行重写。

3.4python包的性质

  • 包实质是一个文件夹
  • 该文件夹里面可能有__init__.py
  • 包的本质依然是模块,因此包里还可以装其它的包

3.5 导入包

跟导入模块格式差不多,只是可能多一个层级

四、库(library)

库是一个抽象的概念,库是一个完整的东西,我们可以认为他是一个完整的项目打包,可直接调用或者运行,一个库中可能有多个包。库由低平台的编译语言实现例如:Cython、C/C++、RPython语言实现的二进制扩展文件(简称轮子),称为库。

五、python中存在的关系

  • 数据封装在容器中(列表、元组、字符串、字典)里面
  • 代码可以封装在function里面
  • function和数据可以封装在class里面
  • 上面三类内容可以打包在module里面
  • 多个module可以打包在package里面
  • 多个package可以打包在library里面

猜你喜欢

转载自blog.csdn.net/LiuXF93/article/details/122476723
今日推荐