Python3 模块基础
模块
什么是模块
模块就是一系列功能的集合体, 而函数是某一功能的集合体, 因此模块可以看成是一堆函数的集合体
模块的四种形式
- 自定义模块
- 第三方模块 (通过pip安装)
- 内置模块
- 包
导入模块
import 模块
impoort time
- 开辟内存空间, 内存空间命名为time
- 把time.py中的所有代码读入名称空间, 然后运行
- 通过
time.方法
使用time模块中的方法
优点: 通过
time.方法
使用方法, 因此不存在变量名和方法名冲突缺点: 每次使用方法都要加上
time.
前缀
from 模块 import 方法
from time import sleep
- 开开辟内存空间, 内存空间命名为time
- 把time.py中所有代码读入名称空间, 然后运行
- 把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'
- m1.py 执行
from m2 import y
代码, 创建m2模块空间并会执行m2.py代码 - m2.py执行
from m1 import x
代码, 创建m1模块空间并执行m1.py代码 - 由于模块名称空间只会开辟一次, 因此执行m1.py代码时会跳过
from m2 import y
代码 - x = 10
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)
模块搜索路径
模块的搜索路径顺序
内存中已经导入的模块
内置模块
自定义模块(环境变量)
Python文件的两种用途
执行文件 : 用来被执行使用
模块文件 : 用来被导入使用
现在我们定义一个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
模块改为包的形式
- 我们新建一个包文件夹, 将包文件夹命名为
a
, 然后在文件夹内新建一个__init__.py
文件 - 然后我们将原来
a.py
中的方法分为两类, 分别存放在m1.py
和m2.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
相对导入
.
代表当前被导入文件所在的文件夹..
代表被导入文件所在的文件夹的上一级...
代表当前被导入文件所在的文件夹的上一级的上一级
from .m1 import f1
from .m2 import f2
Python3 模块基础的更多相关文章
- python 模块基础 和常用的模块
模块的定义 一个模块就是以.py结尾的python 文件,用来从逻辑上组织python代码.注意,模块名和变量名一样开头不能用数字,可以是双下划线和字母. 为什么要用模块? 将一些复杂的需要重复使用的 ...
- (转)Python3 模块3之 Urllib之 urllib.parse、urllib.robotparser
原文:https://blog.csdn.net/qq_36148847/article/details/79153738 https://blog.csdn.net/zly412934578/art ...
- python系列十二:python3模块
#!/usr/bin/python # This Python file uses the following encoding: gbk #Python3 模块 '''用 python 解释器来编程 ...
- python017 Python3 模块
Python3 模块在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了.为此 Python 提供了一个办法, ...
- 03爬虫-requests模块基础(1)
requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...
- 【MM系列】SAP MM模块-基础配置第一篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-基础配置第一篇 ...
- 吴裕雄--天生自然python学习笔记:Python3 模块
Python3 模块 在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办 ...
- python常识系列08-->logging模块基础入门
前言 努力从今天开始,成功从"零"开始. 一.logging模块是什么? 是Python内置的标准模块,主要用于输出运行日志 二.日志是什么? 日志是代码的必要组成部分 记录日志能 ...
- python3.x 基础五:模块
1.定义 模块:本质是.py结尾的python文件,从逻辑上组织python代码,可以是变量,函数,类,逻辑,目的是实现一个功能,test.py 对应模块名:test 包:从逻辑上组织模块的,本质就是 ...
随机推荐
- 这份最新Python面试精选问题你会几道?
相信很多小伙伴学python以后都想进大厂,但是进大厂前你得了解些大厂面试题,可以在面试前复习下,以下是精选的5道python面试题: 第一. Python 的特点和优点是什么? Python 可以作 ...
- lqb 入门训练 Fibonacci数列 (循环 PS:提柜要栈溢出)
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时, ...
- 力扣(LeetCode)4的幂 个人题解
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例 1: 输入: 16 输出: true 示例 2: 输入: 5 输出: false 进阶:你能不使用循环或者递归 ...
- django_2:模板
使用模板变量: 在html文件中,{{title}}即为模板变量, 在view.py文件中,render函数,增加第三个参数,以字典形式给值. def index(req): return rende ...
- linux图形界面 KDE、GNOME
1.Linux图形桌面系统组成(由上往下层次结构) 窗口管理器——Enlightenmen.icewm.Fvwm.window-maker 桌面环境———Gnome.KDE.CDE X WINDOW— ...
- centos 生成网卡UUID
在Linux或CentOS中,可以通过如下命令获取网卡的uuid信息: uuidgen 网卡名07d07031-eb0f-4691-8606-befb46645433 查看网卡UUID nmcli c ...
- Java从零开始(前篇)
前篇 自述 本人大三通信专业,咸鱼一枚,对专业所学傅里叶变换等实在提不起兴趣. 幸好略学过c系列语言,但也浅尝辄止,浑浑噩噩,深入之后被指针弄地晕头转向. 想在毕业后转行计算机,于是我下定决心从零开始 ...
- 2019-9-25:渗透测试,基础学习,medusa爆破学习
Medusa(美杜莎)暴力破解使用 该文章仅供学习,利用方法来自网络文章,仅供参考 一.简介 medusa(美杜莎)是一个速度快,支持大规模并行,模块化,爆破登陆,可以同时对多个主机,用户或是密码执行 ...
- SpringBoot系列之集成Thymeleaf用法手册
目录 1.模板引擎 2.Thymeleaf简介 2.1).Thymeleaf定义 2.2).适用模板 3.重要知识点 3.1).th:text和th:utext 3.2).标准表达式 3.3).Thy ...
- 设置更改root密码、连接mysql、mysql常用命令
6月19日任务 13.1 设置更改root密码13.2 连接mysql13.3 mysql常用命令 13.1 设置更改root密码 使用场景:例如长时间不用忘记了mysql的root密码,那么就需要去 ...