模块

什么是模块

模块就是一系列功能的集合体, 而函数是某一功能的集合体, 因此模块可以看成是一堆函数的集合体

模块的四种形式

  • 自定义模块
  • 第三方模块 (通过pip安装)
  • 内置模块

导入模块

import 模块

impoort time
  1. 开辟内存空间, 内存空间命名为time
  2. 把time.py中的所有代码读入名称空间, 然后运行
  3. 通过time.方法使用time模块中的方法
  • 优点: 通过time.方法使用方法, 因此不存在变量名和方法名冲突

  • 缺点: 每次使用方法都要加上time.前缀

from 模块 import 方法

from time import sleep
  1. 开开辟内存空间, 内存空间命名为time
  2. 把time.py中所有代码读入名称空间, 然后运行
  3. 把sleep()读入当前运行文件, 因此可以通过方法名直接使用该方法

一次导入多个方法:

from time import time, sleep

一次导入全部方法:

from time import *
  • 优点: 使用方法时不用加上time.前缀
  • 缺点: 方法名可能会和变量名有冲突

循环导入

现在有两个.py文件

# m1.py
from m2 import y
x = 10
print('m1:', x+y)
# m2.py
from m1 import x
y = 20
print('m2:', x+y)

我们现在执行m1.py文件, 结果: ImportError: cannot import name 'y'

  1. m1.py 执行from m2 import y代码, 创建m2模块空间并会执行m2.py代码
  2. m2.py执行from m1 import x代码, 创建m1模块空间并执行m1.py代码
  3. 由于模块名称空间只会开辟一次, 因此执行m1.py代码时会跳过from m2 import y代码
  4. x = 10
  5. print('m1:', x+y) 报错

我们可以通过定义函数来解决这个问题, 因为定义函数只检测语法不执行代码

# m1.py
def func():
from m2 import y x = 10
func() print('m1:', x+y)
# m2.py
def func():
from m1 import x y = 20
print('m2:',x+y)

模块搜索路径

模块的搜索路径顺序

  1. 内存中已经导入的模块

  2. 内置模块

  3. 自定义模块(环境变量)

Python文件的两种用途

  1. 执行文件 : 用来被执行使用

  2. 模块文件 : 用来被导入使用

现在我们定义一个module.py模块文件

def func():
print('from func') func()

我们再定义一个script.py执行文件

from module import func

我们现在运行script.py文件, 只是想导入func方法, 结果: from func

解决上述问题, 我们可以将module.py改造为:

def func():
print('from func') if __name__ == '__main__':
func()

当module.py文件为模块文件时候, __name__ = 文件名, 当module.py为执行文件时, __name__ == '__main__'

什么是包

包是模块的一种形式, 就是含有一个__init__.py文件的文件夹, 导入包就是导入__init__.py

为什么要有包

当模块内部函数过多, 为了方便管理模块, 把一个模块划分为多个模块, 但是又不能改变导入方式, 把模块放入一个包(文件夹)内

包的使用

现有如下模块文件a.py:

# a.py

def f1():
pass def f2():
pass def f3():
pass def f4():
pass

导入 a 模块后, 我们可以用下面的方法使用a内的方法

import a
a.f1()
a.f2()
a.f3()
a.f4()

现在我们将 a 模块改为包的形式

  1. 我们新建一个包文件夹, 将包文件夹命名为 a , 然后在文件夹内新建一个__init__.py文件
  2. 然后我们将原来a.py中的方法分为两类, 分别存放在m1.pym2.py文件中
# m1.py

def f1():
pass def f2():
pass
# m2.py

def f3():
pass def f4():
pass

现在我们可以通过 from a.m1 import f1来导入f1()方法, 但这改变了导入方式, 显然不符合包的思想, 于是:

# __init__.py

from a.m1 import f1
from a.m1 import f2 from a.m2 import f3
from a.m2 import f4

然后, 我们就可以import a , 然后通过 a.f1() 来使用f1()方法

注意: 模块文件 m1.py 和 m2.py 的搜索路径以执行文件为准

绝对导入和相对导入

绝对导入

from a.m1 import f1
from a.m1 import f2

相对导入

  1. . 代表当前被导入文件所在的文件夹
  2. .. 代表被导入文件所在的文件夹的上一级
  3. ... 代表当前被导入文件所在的文件夹的上一级的上一级
from .m1 import f1
from .m2 import f2

Python3 模块基础的更多相关文章

  1. python 模块基础 和常用的模块

    模块的定义 一个模块就是以.py结尾的python 文件,用来从逻辑上组织python代码.注意,模块名和变量名一样开头不能用数字,可以是双下划线和字母. 为什么要用模块? 将一些复杂的需要重复使用的 ...

  2. (转)Python3 模块3之 Urllib之 urllib.parse、urllib.robotparser

    原文:https://blog.csdn.net/qq_36148847/article/details/79153738 https://blog.csdn.net/zly412934578/art ...

  3. python系列十二:python3模块

    #!/usr/bin/python # This Python file uses the following encoding: gbk #Python3 模块 '''用 python 解释器来编程 ...

  4. python017 Python3 模块

    Python3 模块在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了.为此 Python 提供了一个办法, ...

  5. 03爬虫-requests模块基础(1)

    requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...

  6. 【MM系列】SAP MM模块-基础配置第一篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-基础配置第一篇   ...

  7. 吴裕雄--天生自然python学习笔记:Python3 模块

    Python3 模块 在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办 ...

  8. python常识系列08-->logging模块基础入门

    前言 努力从今天开始,成功从"零"开始. 一.logging模块是什么? 是Python内置的标准模块,主要用于输出运行日志 二.日志是什么? 日志是代码的必要组成部分 记录日志能 ...

  9. python3.x 基础五:模块

    1.定义 模块:本质是.py结尾的python文件,从逻辑上组织python代码,可以是变量,函数,类,逻辑,目的是实现一个功能,test.py 对应模块名:test 包:从逻辑上组织模块的,本质就是 ...

随机推荐

  1. 一分钟带你了解下MyBatis的动态SQL!

    MyBatis的强大特性之一便是它的动态SQL,以前拼接的时候需要注意的空格.列表最后的逗号等,现在都可以不用手动处理了,MyBatis采用功能强大的基于OGNL的表达式来实现,下面主要介绍下. 一. ...

  2. nyoj 24-素数距离问题 (素数算法)

    24-素数距离问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:21 submit:71 题目描述: 现在给出你一些数,要求你写出一个程序,输出这 ...

  3. 网络权重初始化方法总结(下):Lecun、Xavier与He Kaiming

    目录 权重初始化最佳实践 期望与方差的相关性质 全连接层方差分析 tanh下的初始化方法 Lecun 1998 Xavier 2010 ReLU/PReLU下的初始化方法 He 2015 for Re ...

  4. 业务领域建模Domain Modeling

    我的工程实践选题为ESP32低功耗的实现,本项目基于ESP32嵌入式开发平台.下文将以需求为基础,对该项目进行领域建模. 一.概念介绍 1.业务建模 1.1 概念介绍 业务建模(Business Mo ...

  5. Django使用mysql数据的流程

    创建一个mysql数据库 1.打开终端(cmd): 输入: mysql -uroot -p 密码:*** 输入: create database 数据库名字; 2.在settings中进行配置 DAT ...

  6. Java从零开始(前篇)

    前篇 自述 本人大三通信专业,咸鱼一枚,对专业所学傅里叶变换等实在提不起兴趣. 幸好略学过c系列语言,但也浅尝辄止,浑浑噩噩,深入之后被指针弄地晕头转向. 想在毕业后转行计算机,于是我下定决心从零开始 ...

  7. 2019-9-26:渗透测试,基础学习,nmap扫描kali虚拟机服务

    初识Nmap 1, 首先确定kali的ip地址,输入命令ifconfig 2, 开启所需要扫描的服务, 开启ssh:service ssh start, 确认ssh服务是否开启service ssh ...

  8. PIC18F45K80串口1和串口2异步收发通信实例

    PIC18F45K80串口1和串口2异步收发通信实例 一:配置串口1初始化函数 首先打开技术手册,查看异步串口的操作流程以及配置. 需要将串口对应引脚的方向寄存器设置为输入

  9. 最全 HTTP 安全响应头设置指南

    销售“安全记分卡”的公司正在崛起,并已开始成为企业销售的一个因素.这些公司组合使用 HTTP 安全报头和 IP 信誉来进行评级.不过,在很大程度上,公司的得分取决于对外开放网站上设置的安全响应报头.本 ...

  10. SpringBoot项目集成Hystrix

    Hystrix Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案. 1.什么是服务熔断   服务熔断就是对该服务的调用 ...