文章目录

  • 一、模块
    • 1.1. 导入模块
      • 1.1.1 导入模块的方式
      • 1.1.2 导入方式详解
        • 1.1.2.1 import (导入全部功能)
        • 1.1.2.2 from..import.. (导入部分功能)
        • 1.1.2.3 from .. import *
        • 1.1.2.4 as定义别名
    • 1.2. 制作模块
      • 1.2.1 定义模块
      • 1.2.2 测试模块(`__name__`)
      • 1.2.3 调用模块
      • 1.2.4 注意事项
    • 1.3. 模块定位顺序
    • 1.4. `__all__`
  • 二、包(Package)
    • 2.1 概念
    • 2.2 制作包
    • 2.3 导入包
      • 2.3.1 方法一
      • 2.3.2 方法二
  • 三、发布模块(知道)
    • 3.1 制作发布压缩包步骤
      • 1) 创建 setup.py
      • 2) 构建模块
      • 3) 生成发布压缩包
    • 3.2 安装模块
    • 3.3 卸载模块
    • 3.4 `pip` 安装第三方模块
      • 1)在 `Mac` 下安装 `iPython`
      • 2)在 `Linux` 下安装 `iPython`
  • 四、总结

一、模块

模块是 Python 程序架构的一个核心概念

  • 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块
  • 模块名 同样也是一个 标识符,需要符合标识符的命名规则
  • 在模块中定义的 全局变量函数 都是提供给外界直接使用的 工具
  • 模块 就好比是 工具包,要想使用这个工具包中的工具,就需要先 导入 这个模块

1.1. 导入模块

1.1.1 导入模块的方式

  • import 模块名

  • from 模块名 import 功能名

  • from 模块名 import *

  • import 模块名 as 别名

  • from 模块名 import 功能名 as 别名

  • 导入之后

    • 通过 模块名. 使用 模块提供的工具 —— 全局变量函数

1.1.2 导入方式详解

1.1.2.1 import (导入全部功能)

  • 语法
# 1. 导入模块
import 模块名
import 模块名1, 模块名2...# 2. 调用功能
模块名.功能名()
  • 示例
import math
print(math.sqrt(9))  # 3.0

1.1.2.2 from…import… (导入部分功能)

  • 语法
# 从 模块 导入 某一个工具
from 模块名 import 功能1, 功能2, 功能3...
  • 导入之后

    • 不需要 通过 模块名.
    • 可以直接使用 模块提供的工具 —— 全局变量函数
  • 示例

from math import sqrt
print(sqrt(9))    # 3.0

1.1.2.3 from … import *

  • 语法
# 从 模块 导入 所有工具
from 模块名 import *

这种方式不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查

  • 示例
from math import *
print(sqrt(9))    # 3.0

1.1.2.4 as定义别名

  • 语法
# 模块定义别名
import 模块名 as 别名# 功能定义别名
from 模块名 import 功能 as 别名
  • 示例
# 模块别名
import time as tttt.sleep(2)
print('hello')# 功能别名
from time import sleep as sl
sl(2)
print('hello')

1.2. 制作模块

  • 在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
  • 也就是说自定义模块名必须要符合标识符命名规则。

1.2.1 定义模块

新建一个Python文件,命名为my_module1.py,并定义testA函数。

def testA(a, b):print(a + b)

1.2.2 测试模块(__name__

在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息.,例如,在my_module1.py文件中添加测试代码。

def testA(a, b):print(a + b)# 测试信息
testA(1, 1)

此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行testA函数的调用。

解决办法如下

def testA(a, b):print(a + b)# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行testA函数调用
if __name__ == '__main__':testA(1, 1)
  • __name__ 是系统变量,是模块的标识符,是 Python 的一个内置属性,记录着一个 字符串。它的值分为两种情况:

    • 如果 是被其他文件导入的__name__ 就是 模块名
    • 如果 是当前执行的程序 __name____main__

1.2.3 调用模块

import my_module1
my_module1.testA(1, 1)

1.2.4 注意事项

如果使用from .. import ..from .. import *导入多个模块的时候,且模块内有同名功能。当调用这个同名功能的时候,调用到的是后面导入的模块的功能。

  • 示例
# 模块1代码
def my_test(a, b):print(a + b)# 模块2代码
def my_test(a, b):print(a - b)# 导入模块和调用功能代码
from my_module1 import my_test
from my_module2 import my_test# my_test函数是模块2中的函数
my_test(1, 1)

1.3. 模块定位顺序

当导入一个模块,Python解析器对模块位置的搜索顺序是:

  1. 当前目录
  2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
  3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

  • 注意

    • 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
    • 使用from 模块名 import 功能的时候,如果功能名字重复,调用到的是最后定义或导入的功能。
# 拓展: 名字重复
# 问题:import 模块名  是否担心 功能名字重复的问题  -- 不需要
import time
print(time)time = 1
print(time)# 问题:为什么变量也能覆盖模块? -- 在Python语言中,数据是通过 引用 传递的。

<module ‘time’ (built-in)>
1

1.4. __all__

如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。

  • my_module1模块代码
# 定义多个功能,把某个功能添加到__all__
__all__ = ['testA']def testA():print('testA')def testB():print('testB')
  • 导入模块的文件代码
from my_module1 import *testA()# 因为testB函数没有添加到all列表,只有all列表里面的功能才能导入
testB()

testA

NameError: name ‘testB’ is not defined

二、包(Package)

2.1 概念

:将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为

  • 是一个 包含多个有联系的模块组织在一起特殊目录(文件夹)
  • 目录下有一个 特殊的文件 __init__.py
  • 包名的 命名方式 和变量名一致,小写字母 + _

好处

  • 使用 import 包名 可以一次性导入 所有的模块

2.2 制作包

[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。

注意:新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为。

  • 示例
  1. 新建包mypackage
  2. 新建包内模块:my_module1my_module2
  3. 模块内代码如下
# my_module1
print(1)def info_print1():print('my_module1')
# my_module2
print(2)def info_print2():print('my_module2')

2.3 导入包

2.3.1 方法一

# 导入
import 包名.模块名# 调用功能
包名.模块名.功能名()
  • 示例
import my_package.my_module1my_package.my_module1.info_print1()

2.3.2 方法二

注意:必须在__init__.py文件中添加__all__ = [],控制允许导入的模块列表。

from 包名 import *
模块名.功能名()
  • 示例
from my_package import *my_module1.info_print1()

三、发布模块(知道)

  • 如果希望自己开发的模块,分享 给其他人,可以按照以下步骤操作

3.1 制作发布压缩包步骤

1) 创建 setup.py

  • setup.py 的文件
from distutils.core import setup# 多值字典参数,每一个参数之间用逗号分隔
setup(name="hm_message",  # 包名version="1.0",  # 版本description="itheima's 发送和接收消息模块",  # 描述信息long_description="完整的发送和接收消息模块",  # 完整描述信息author="LiYang",  # 作者author_email="123@163.com",  # 作者邮箱url="www.qq.com",  # 主页py_modules=["hm_message.send_message","hm_message.receive_message"])   # 包中,包含的模块;把包中包含的模块全部写上去

有关字典参数的详细信息,可以参阅官方网站:

https://docs.python.org/2/distutils/apiref.html

2) 构建模块

  • 进入到发布模块这个目录,在终端中执行下面命令
$ python3 setup.py build

3) 生成发布压缩包

  • 进入到发布模块这个目录,在终端中执行下面命令
$ python3 setup.py sdist

注意:要制作哪个版本的模块,就使用哪个版本的解释器执行!

3.2 安装模块

$ tar -zxvf hm_message-1.0.tar.gz   # 解压缩(拿到的压缩包)$ sudo python3 setup.py install     # 在解压下的文件中进行

3.3 卸载模块

直接从安装目录下,把安装模块的 目录 删除就可以

$ cd /usr/local/lib/python3.5/dist-packages/
$ sudo rm -r hm_message*

3.4 pip 安装第三方模块

  • 第三方模块 通常是指由 知名的第三方团队 开发的 并且被 程序员广泛使用Python 包 / 模块

    • 例如 pygame 就是一套非常成熟的 游戏开发模块
  • pip 是一个现代的,通用的 Python 包管理工具
  • 提供了对 Python 包的查找、下载、安装、卸载等功能

安装和卸载命令如下:

# 将模块安装到 Python 2.x 环境
$ sudo pip install pygame
$ sudo pip uninstall pygame# 将模块安装到 Python 3.x 环境
$ sudo pip3 install pygame
$ sudo pip3 uninstall pygame

1)在 Mac 下安装 iPython

$ sudo pip install ipython

2)在 Linux 下安装 iPython

$ sudo apt install ipython
$ sudo apt install ipython3

四、总结

  • 导入模块方法
import 模块名from 模块名 import 功能名from 模块名 import *
  • 导入包
import 包名.模块名from 包名 import *
  • __all__ = [] :允许导入的模块或功能列表

23_python基础—模块和包相关推荐

  1. python基础---模块与包

    1.模块导入方法 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,导入模块可以实现功能的重复利用 import加载的模块分为四个通用类别: 1 使 ...

  2. Python基础——模块和包详解以及pip操作模块和包的指令

    随着项目越来越大,所有代码都放在一个文件中,已经不能满足我们的需求了.这时候就要将代码进行整理了,模块和包的出现就是为了解决这个问题的.模块可以将一些相关联的代码组合在一个py文件中,包可以将一些相关 ...

  3. Python基础(七)--模块和包

    目录 Python基础(七)--模块和包 1 模块 1.1 什么是模块 1.2 模块的使用 1.3 模块的搜索路径 1.4 模块的缓存 2 包 2.1 什么是包 2.2 包的使用 3 常用模块 3.1 ...

  4. dllimport 找不到指定的模块_Python语法基础(15)模块与包

    模块与包 模块 Python 中一个以 .py 结尾的文件就是一个模块,模块中定义了变量.函数等来实现一些类似的功能.Python 有很多自带的模块(标准库)和第三方模块,一个模块可以被其他模块引用, ...

  5. python的人工智能模块_饮冰三年-人工智能-Python-17Python基础之模块与包

    一.模块(module) 1.1 啥是模块 简单理解一个.py文件就称之为一个模块. 有的功能开发者自己无法完成,需要借助已经实现的函数\类来完成这些功能.例如:和操作系统打交道的类或者是随机数函数等 ...

  6. Python基础之模块和包

    Python基础之模块和包 本节将介绍Python中的模块和包的概念及基本用法. 模块 简单来说模块就是一个python文件,我们可以将一些常量.函数.类等封装到一个模块中,然后在程序中使用该模块.模 ...

  7. python3 打印目录下所有模块_python3基础12详解模块和包(库)|构建|使用

    本篇详解python中模块和包(库)的构建及使用. 欢迎微信随缘关注@pythonic生物人 本文您将学到什么? 1.模块 定义模块 导入模块 调用模块中函数方法1 模块名.函数名方法2 from 模 ...

  8. 【Python基础入门系列】第06天:Python 模块和包

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...

  9. Python学习入门基础:文件读写操作、模块和包、异常

    一.文件 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...

最新文章

  1. 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库01 —— 准备环境,搭建本地仓库,安装ambari...
  2. Python学习笔记__13.2章 requests
  3. android studio 3.1坑,Android Studio3.1升级遇到的坑
  4. DARPA新局长维多利亚·科尔曼展望未来发展
  5. java复合数据类型_复合数据类型
  6. VTK:PolyData之PointInsideObject
  7. iOS 两个tableview的 瀑布流
  8. 代码重构 防火墙 相关知识
  9. 【TeeChart .NET教程】(七)使用函数
  10. spring boot学习(2) SpringBoot 项目属性配置
  11. 轩辕传奇服务器合并信息,轩辕传奇9月1日部分服务器合服公告
  12. 天文学专业在什么时候学计算机,南京大学在985排名第几?南京大学最牛的专业是天文系吗?...
  13. 一个人真的不能度过晚年吗?
  14. 【持续更新】MARL 算法汇总
  15. linux编译libmp3lame,使用libmp3lame库编码mp3
  16. 基于短时时域处理中短时能量和过零率的语音端点检测方法
  17. Halcon轮廓提取
  18. H5实现输入框添加语音功能的方法详解
  19. 【真相】网易暴力裁员事件 企业暴力开除重病员工事件绝非孤例
  20. 微生物 Alpha多样性 作图 16S 菌群 R语言

热门文章

  1. php b+树,PHP利用b+树概念实现树形数组
  2. 资源放送丨《容灾体系建设之“独孤九式”》PPT视频
  3. Oracle 20c 新特性:Online SecureFiles Defragmentation 在线的 LOB 碎片整理
  4. 【福利】MySQL vs Postgre SQL: 5个你最关注的非技术维度的区别
  5. 面试官:Java 线程如何启动的?
  6. 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?
  7. MindSpore实践:对篮球运动员目标的检测
  8. 【华为云技术分享】一文掌握5种常用的机器学习模型及其优缺点
  9. 快速了解云原生中的微服务应用(内含福利)
  10. 云下IDC和云上VPC如何高速稳定互联?——云专线接入方案