Python基础篇——Day11

Python基础篇——Day11

  • 模块化编程
    • 一般流程
    • 模块的创建和测试代码
    • import语句导入
    • from...import语句导入
    • 模块加载问题
    • package的使用
      • 导入包
      • 用*导入包
    • sys.path和模块搜索路径
    • 模块的发布和安装

模块化编程

一般流程

  1. 设计API(Application Programming Interface),进行功能描述
  2. 编码实现API中描述的功能
  3. 在模块中编写测试代码,并消除全局代码
  4. 使用私有函数实现不被外部客户端调用的模块函数

模块的创建和测试代码

每个模块都有相应的名称,可以通过特殊变量__name__获取,正常情况下,模块的名称对应源文件名,仅有一个例外,就是当一个模块被作为程序入口时,它的__name__值为“main”,我们利用这一特点,可以将模块源代码文件中的测试代码进行独立的处理,而不影响模块被其它程序调用

import语句导入

import语句的基本语法:

import 模块名   # 导入一个模块
import 模块1,模块2  # 导入多个模块
import 模块名 as 模块别名  # 导入模块并使用新名字

import加载的模块分为四个类别:

  1. 使用python编写的代码(.py文件)
  2. 已被编译为共享库或DLL的C或C++扩展
  3. 包好一组模块的包
  4. 使用C编写并链接到python解释器的内置模块

import的本质时使用了内置函数__import__()

通过import导入一个模块时,python解释器进行执行,最终生成一个对象,这个对象就是代表被加载的模块

from…import语句导入

导入的是模块中的一个函数或一个类
基本语法:

from 模块名 import 成员1,成员2...

from 模块名 import *  # 导入一个模块中所有的成员

模块加载问题

当导入一个模块时,模块中的代码都会被执行,不过,如果再次导入这个模块,则代码不会再次执行

为什么这个设计?
因为导入模块更多的时候需要的是定义模块中的变量,函数,对象等,这些东西并不需要被反复定义和执行。所以只导入一次就成了一种优化

一个模块无论被导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象

如果确实需要多次加载,操作如下:

import math
import importlib
importlib.reload(math)

package的使用

当一个项目中有许多模块时,我们将功能类似的模块放到一起,就形成了”包“,本质上,”包“就是一个必须有__init__.py的文件夹,包下面可以包含模块,也可以再包含子包(subpackage),就像是文件夹下面可以有文件,也可以有子文件夹一样

导入包

导入包的本质其实是导入了包的__init__.py文件,即,当import package1时程序执行了包的__init__.py文件。这样可以在__init__.py中进行所需模块的批量导入,而不用一个一个导入

用*导入包

import *理论上时希望文件系统找出包中的所有子模块,然后导入它们。这可能会发较长时间。基于此,Python给出的解决方案是提供一个明确的包索引

这个索引由__init__.py 定义 all__变量,该变量为列表,如package1包下的__init.py中,可定义__all__=[“module A1”,“module A2”],这样,当from package1 import * 时,就可执行两个子包module A1和module A2的导入

sys.path和模块搜索路径

当我们导入某个模块时,Python解释器一般按照如下路径寻找该模块:

  1. 内置模块
  2. 当前目录
  3. 程序主目录
  4. pythonpath目录(如果已经设置pythonpath环境变量了)
  5. 标准链接库目录
  6. 第三方库目录
  7. .pth文件的内容(如果存在)
  8. sys.path.append()临时添加的目录

当任何一个程序启动时,会把上述的这些搜索路径(除内置模块)进行收集并放到sys模块的path属性中(sys.path)

模块的发布和安装

步骤:

  1. 为模块创建如下结构的文件夹

Python基础篇——Day11_第1张图片

  1. 在文件夹中创建名为setup.py的文件,其内容如下:
from distutils.core import setup

setup(
	name="flying_distance", # 对外发布的模块名
	version="1.0",  # 版本号
	decription="这是一个对外发布的模块,用于计算距离",
	author="c2h4ds",
	author_email="xxxxxxx",
	py_modules=["flying_distance.flying_distance1"] # 要发布的具体模块
)
	
  1. 构建一个发布文件,通过终端,cd到模块文件夹fb下面,再键入命令:
python setup.py sdist

然后就制作了一个发布文件
Python基础篇——Day11_第2张图片

  1. 将发布的模块安装到本地,仍在cmd命令下操作,进入setup.py所在目录,键入命令:
pyhton setup.py install

即可安装在python/Lib/site-packages目录下

你可能感兴趣的:(python,python,编程语言,数据挖掘)