模块的基本使用
在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。基本格式如下:
import module1,mudule2...
如果要导入模块中的函数,其格式如下:
from 模块名 import 函数
from 模块名 import 函数名1,函数名2....
导入某个模块中的所有函数,格式如下:
from 模块名 import *
区别:
from import : 从车里把矿泉水拿出来,给我
import : 把车给我
Python解析器搜索模块位置的搜索顺序:
- (1)搜索当前目录
- (2)如果都找不到,会继续查看默认路径。搜索路径被存储在sys模块中的path变量
下列命令可以输出搜索路径:
import sys
print(sys.path)
sys.path输出是一个列表; 第一项输出的是文件所在目录,亦即我们执行python解释器的目录(对于脚本的话就是运行的脚本所在的目录)。
模块的制作
简介
模块化是将程序分解为一个个的模块module,通过组合模块来搭建出一个完整的程序。
优点:便于团队开发,方便维护,代码复用。
在python中一个脚本(.py)文件就是一个模块,创建模块实际上就是创建一个.py文件,可以被其他模块导入并使用。
————————————————
注:
1 自定义模块的时候要注意命名的规范,使用小写,不要使用大写,不要使用中文,不要使用特殊字符等。
2 不要与内置模块冲突 sys 等。
————————————————
# 在模块中定义变量
a = 10
b = 20
# 在模块中定义函数
def max(x, y):
"""
加法
:param x:
:param y:
:return:
"""
return x + y
def min(x,y):
"""
减法
:param x:
:param y:
:return:
"""
return x-y
# 在模块中定义类
class calculator: # 定义一个加法计算器
@classmethod #导入计算器模块
def sum(cls,*nums):
res = 0
for i in nums:
res += i
return res
'''
__name__ 属性是模块的内置属性,每个模块中都有该属性,当该
.py文件是主执行文件,直接被执行时,其值为 __main__ ,当该
.py文件是被调用,导入执行文件时,其值为模块名
'''
# print(__name__)# 如果这么直接这么测试,被导入文件执行时,导入文件也会打印该内容
#程序入口,类似于java中的main()方法,只在当直接调用该文件时才会执行,用来执行测试
if __name__ == '__main__' :
print(calculator.sum(1,2,3)) # 只有在当前界面执行才会打印该内容,其他文件中不会执行。
python提供了一个__name__属性,每个模块都有一个__name__属性,当其值为‘main’时,表明该模块自身在运行,否则是被引用。
Python中的包
为了组织好模块,通常会将多个模块放在一个包。
包是python模块文件所在的目录,且该目录下必须存在__init__.py文件(文件内容可以为空)。
package_a
├── init.py
├── module_a1.py
└── module_a2.py
package_b
├── init.py
├── module_b1.py
└── module_b2.py
main.py
如果main.py想要引用package a中的模块module a1,可以使用下列语句实现:
from package_a import module_a1
import package_a.module_a1
如果package_a中的module a1需要引用package_b,那么默认情况下,Python是找不到package_b的。
可以在package_a中的__init__.py中添加“sys.path.append('../')”
将该包下的所有module都添加入import __init__即可。
模块的发布(别人可以使用你构建的模块)
(1)将模块放在和setup.py文件相同的目录
.
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── init.py
└── subb
├── cc.py
├── dd.py
└── init.py
(2)编辑setup.py文件,指明需要包含哪些py文件。
from distutils.core import setup
setup(
name="imust",
version="1.0",
description="welcom to imust",
author="imust",
py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'] )
(3)构建模块
python setup.py build
build命令构建后的目录结构→
.
├── build
│ └── lib
│ ├── suba
│ │ ├── aa.py
│ │ ├── bb.py
│ │ └── init.py
│ └── subb
│ ├── cc.py
│ ├── dd.py
│ └── init.py
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── init.py
└── subb
├── cc.py
├── dd.py
└── init.py
(4)生成发布压缩包
python setup.py sdist
打包后的目录结构→
根据setup.py文件中参数生成,例如名称是imust,版本是1.0
.
├── build
│ └── lib
│ ├── suba
│ │ ├── aa.py
│ │ ├── bb.py
│ │ └── init.py
│ └── subb
│ ├── cc.py
│ ├── dd.py
│ └── init.py
├── dist
│ └── imust-1.0.tar.gz
├── MANIFEST
├── setup.py
…
模块的安装
(1)找到模块的压缩包,对压缩包进行解压
(2)执行命令“python setup.py install”
(3)即可引入包suba和subb下的python文件
from suba import aa
from subb import cc