一、模块
1、定义
模块就是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块。
2、模块导入
(1)import 模块名1,模块名2
(2)import 模块名.函数名
因为可能存在这样一种情况:在多个模块中含有相同名称的函数, 如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。 所以如果像上述这样引入模块的时候,调用函数必须加上模块名。
(3)from 模块名 import 函数名/变量名
通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名, 但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一 次引入
(4)import 长模块名 as 短模块名
from 模块名import 长函数名 as 短函数名
导入的模块名/函数名/变量名过长,进行重命名
(5)from 模块名 import*
把一个模块的所有内容全都导入
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声 明不该被过多地使用
import random
import time
import functools
from random import randint as rint
如果模块中含有__ all __ 变量:
在使用from 模块名 import* 导入时,只有__ all __ 变量才可以被导入
如果模块中没有__ all __ 变量:
则所有的信息都能导入
(6)第三方模块:不是python官方提供的模块,需要通过工具安装
import requests
import numpy as np
import matplotlib.pyplot as plt
第三方模块安装方式:
1) pip install 模块名
2)pip install -i https://pypi.douban.com/simple 模块名
3) 在pycharm的解释器环境中添加并实现安装
(7)自定义模块
将自己写的.py文件封装成一个模块,
则可以导入使用
#封装一个模块
name = 'root'
password = '123'
def login():
print('login.....')
def register():
print('register.....')
if __name__ == '__main__':
print('正在调用website模块......')
#print(__file__) #打印文件的绝对路径
#print(__doc__) #打印模块的帮助文档
#导入上面的自定义模块
import website
website.login()
website.register()
可以看到,在导入自定义模块的时候,可以使用模块里的函数和变量
导入模块的过程,实质是执行模块内容的过程:
可以看到,先执行了模块的内容,然后调用模块的login()和register()函数
然而有时候我们并不想要模块执行的结果,只想调用,那么怎么做:
___ main___ :模块的名称
如果当作模块导入时, 结果为模块名称, 这里是website
如果不是当作模块导入,结果为 ___ main___
所以:
如果被当作模块导入时,不满足 if 语句,所以就不执行函数
所以,我们在通常写代码调用函数时,最好加上这句if语句
二、包
包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。
创建:
创建包后会自动生成一个 __ init .py文件
导入包的过程,实质是执行包里面的 init __.py 初始化文件
import * 理论上是希望文件系统找出包中所有的子模块,然后导入它们。 But 会花长时间,并出现边界效应等。Python 解决方案是提供一个明确的包索引。 这个索引由 __ init __.py 定义 __ all __ 变量,该变量为一列表, 只会导入指定的内容
三、模块制作与发布
1、制作
每个Python文件都可以作为一个模块,模块的名字就是文件的名字,所以python文件起名字最好起英文。
在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效 果,这个开发人员会自行在py文件中添加一些测试信息。
为了避免这些测试信息在模块调用时执行,就需要使用
if __ name ==’ main __’: 语句
2、发布
(1)为模块文件创建一个文件夹,并将模块文件复制到这个文件中(一般,文件夹的名字和模块的名字一样)
(2)在文件夹中创建一个名为 setup.py 的文件,内容如下:
from distutils.core import setup
setup(
name='verifycode', # 模块名称
version='1.0.0', # 版本
author='作者名',
author_email='作者联系邮箱',
description="模块表述",
py_modules=['verifycode'] #模块名,不需要 .py
)
此时文件夹中含有
(3)构建模块和发布文件:
python setup.py build
python setup.py sdist
进行解包
将发布安装到你的Python本地副本中:
python setup.py install
(4) pypi发布:
注册PyPI网站 http://pypi.python.org
向PyPI上传代码
python setup.py register
python setup.py sdist upload