
【千锋教育干货暴击】
如果你想更好的学习Python乃至转行,弯道超车,快人一步!本课程零基础即可加入学习,抓住大数据、机器学习、人工智能时代的红利,开启你的第一行代码吧!
↓ ↓ ↓
千锋教育Python教程_700集零基础Python入门到精通教程(保姆级新手教程)
千锋教育Python教程全套_python零基础入门到精通(学完可达到Python工程师水平)
哈利波特用他的魔法打败了伏地魔!用的法器就是魔法棒(魔杖),既然魔杖可以配合咒语施展魔法,让巫师体内的魔力集中的释放出来,那么我们 Python 有没有这么神奇的知识?
这就是模块,使用模块可以召唤更多的函数,类,变量等,让我们写起程序来更加的方便,得心应手。
模块内容主要包含:
模块简介
模块导入
包的导入
name
常见系统模块介绍
在python中一个脚本(.py)文件就是一个模块,创建模块实际上就是创建一个.py文件,可以被其他模块导入并使用。(提示定义的注意事项)

之前学习过函数,知道它是组织好的,可以重复使用的,用来实现某个单一功能的代码。
学习了类,发现类比函数更强大,它封装了属性与方法,可以实现更多的功能。
模块就更加强大了,里面可以包含更多的变量、函数、类等。说明模块中包含的内容更丰富,使用更加方便。

所以我们使用模块的好处就更加显而易见了。
模块内可以有函数、类、变量,利用这些可以更简单的完成许多工作
模块可以在文件中永久保存代码
模块间可以相互调用(通过import或者 from...import)
我们定义一个模块:harry.py,同时复习一下前面的内容。
# 变量
name = 'Harry Potter'
age = 10
# 函数
def fight(tool=None):
if tool:
print('在魔法学校驾驶'+tool+'练习飞行课!')
else:
print('走到魔法学校,就会练习飞行课!')
# 类: 课程类
class Course:
def __init__(self,name,c_list):
self.name = name # 学员名
self.c_list = [] # 课程列表
# 选修课 c_name 表示课程名
def add_course(self,c_name):
if c_name:
self.c_list.append(c_name)
else:
print('选修课程不能为空哦!')
# 取消选修课
def remove_course(self,c_name):
if c_name:
self.c_list.remove(c_name)
else:
print('选修课程不能为空哦!')
为了更好的表示模块间可以相互导入使用,我们再定义一个模块:magic.py (只有一个函数)
def use_magic():
print('我会施展厉害的魔法!') 模块导入是指在一个模块中想使用其他模块的变量、函数或者类,要通过导入的方式实现。 导入的模块分为:

无论是导入自己的还是第三方的模块都可以使用下列的方式。
模块的导入方式有:两种
import 导入
所谓import顾名思义,通过英文单词就是:引入、导入的。

注意:一般导入语句都是放在模块的开头。
此时演示: harry.py 在 magic.py 中的导入
导入的目的主要是可以使用模块中的变量、函数与类。但是导入之后我们再怎么使用呢?

import harry
.....
# 使用变量 name
print(harry.name)
# 调用函数
harry.fight()
# 类对象的创建
c = harry.Course('哈利')
c.add_course('黑魔法防御术')
print(c.name) import还有另外一种用法,就是import…as… ,使用as的目的就是重新命名。如果日后在使用的时候发现模块名太长了,在使用的时候每次也要写这么长,太不方便了。比如后面数据分析用到的matplotlib名字长,那就可以起个别名。
其实这个别名就类似你的小名或者外号一样的。
import harry as hy
#使用的时候就变成了
print(hy.name)
print(hy.age)
# 调用函数
hy.fight()
# 类对象的创建
c = hy.Course('哈利')
c.add_course('黑魔法防御术')
print(c.name)
from...import 导入
为什么还有 from...import 的导入方式?
因为上面的导入虽然可以使用别名,但是调用函数或者使用类创建对象的的时候,每次前面必须要带着模块名,比较麻烦。
如果直接对函数进行调用或者类创建对象,岂不更香?from...import 来啦
语法:
语法如下:

from harry import name,age,fight,Course
#使用的时候就变成了
print(name)
print(age)
# 调用函数
fight()
# 类对象的创建
c = Course('哈利')
c.add_course('黑魔法防御术')
print(c.name) 继续举例,在 magic.py 中定义一个函数,在函数中使用fight()函数
from harry import Course
.....
中间省略
.....
# 操作课程
def go_home(name,tool):
# 调用 fight 方法
fight(tool)
print(name+'学会了直接回家吧!')
# 调用 go_home
go_home('罗恩','汽车') 当然如果导入的内容比较多,可以使用 from 模块 import * 导入该模块下所有的内容
导入为什么这么好用呢?
导入模块其实就是在执行py文件;开辟一块新内存,将内容加载到内存中;每次使用直接从内存中获取
为了更好的组织模块,会将多个模块存到包。Python 处理包也是相当方便的。简单来说,包就是文件夹,但该文件夹下必须存在 _init_.py 文件。 通常**_init_.py** 文件为空,但是我们还可以为它增加其他的功能。
我们在导入一个包时,实际上是执行 _init_.py 里面的代码
_init_.py主要控制包的导入行为,通过 all但是不展开说
常见的包结构如下(可以简单的画图):

新建一个 package 包名字:potter,将 harry.py放到包中,此时观察 magic.py 文件的内容出现报错了。
为什么呢?
包的导入仍使用 import 、 from ... import 语句,可以使用

使用的时候就比较麻烦,就是: 包名.模块名.变量
magic.py
import potter.harry
.....
# 使用变量 name
print(potter.harry.name)
# 调用函数
potter.harry.fight()
# 类对象的创建
c = potter.harry.Course('哈利')
c.add_course('黑魔法防御术')
print(c.name)
print(c.c_list)

from potter.harry import name,age,fight,Course
#使用的时候就变成了
print(name)
print(age)
# 调用函数
fight()
# 类对象的创建
c = Course('哈利')
c.add_course('黑魔法防御术')
print(c.name)
print(c.c_list) 如果里面出现与导入包相同的变量名\函数名\类,使用的顺序是什么样子的?
当Python执行import语句时,它会在一些路径中搜索Python模块和扩展模块。可以通过sys.path查看这些路径,比如:
# 可以在终端演示
import sys
print(sys.path)
# 注意打印结果中的""表示当前目录,如果有的话 所以当import某个模块时,解释器首先搜索具有该名称的内置模块,如果没有找到,将在变量 sys.path 给出的目录列表中搜索名为 模块名.py 的文件。sys.path 包含了一下几个目录:
脚本的当前目录;
PYTHONPATH环境变量;就是当初安装的时候在环境变量中设置的内容
python安装时的系统目录;
此时在 magic.py 中声明一个name 变量,赋值为:罗恩
from potter.harry import *
# 注意此时导入的 harry 中也有name 变量
name = '罗恩'
print(name)
# 此时打印结果是罗恩 在 potter 包中,新建一个模块 test.py和 magic1.py

def use_magic():
print('我会施展厉害的魔法!')
print('我是一个新的 magic 模块') 在此模块中分别导入 harry.py 中的变量,函数,类 (可以使用 from potter.harry import *)和 magic1.py(from magic1 import use_magic) 中定
此时运行 test.py (注意:test 中只有导入语句没有其他的内容) 观察是否有打印内容.
这是为什么会有打印出来? 引出__name__的使用
在 magic1.py 中打印一下_name_, 直接运行
magic1.py 文件观察打印的内容
然后再次运行一下 test.py 文件,观察结果.
_name__就表示当前模块的名称,自身运行打印结果是:_main,但是如果其他模块导入则打印的就是包名.模块名了
所以可以通过判断_name__是否等于_main__来来阻止导入模块中的一些打印内容不执行
修改 magic1.py
def use_magic():
print('我会施展厉害的魔法!')
if __name__ == '__main__':
print('我是一个新的 magic 模块') 上面我们介绍的都是自定义模块,我们也可以使用系统的模块
time &datetime模块
random
os
time &datetime模块time模块中可以获取时间戳和休眠等a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
import time
t1 = time.time()
print(t1)
print(time.ctime(t1)) b、sleep()
import time
for i in range(5):
print(i)
time.sleep() datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
比如 datetime 类下的 now()
from datetime import datetime
print(datetime.now()) # 获取格式好的时间和日期 timedelta类进行时间加减使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算。
from datetime import *
dt = datetime.now()
#日期减一天
dt1 = dt + timedelta(days=-1)#昨天
dt2 = dt - timedelta(days=1)#昨天
dt3 = dt + timedelta(days=1)#明天
print(dt1) random 模块
主要是跟随机数有关的操作,都在此模块中
vimport random
print(random.random()) # 0到1的随机小数,是一个float浮点数
print(random.randint(1,10)) # 1到10之间的随机整数
print(random.randrange(1,10)) # 1到10之间的随机数(记得range只有头没有尾巴)
names = ['赵丽颖','杨幂','迪丽热巴','高圆圆','刘诗诗']
# 随机选出一位美女
print(random.choice(names))
os 模块
os模块: 对操作系统进行一系列操作模块。
import os
#getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)
result = os.getcwd()
print(result)
# mkdir() 创建文件夹
os.mkdir('images')
#listdir() 获取指定文件夹中所有内容的名称列表
result = os.listdir('./potter')
print(result)
# 删除一个文件
os.remove('文件名') 删除一个文件
print(os.environ) # 获取系统环境变量
#当然也可以使用 os.path 下面的各种操作,os.path 是 os 模块的子模块
# abspath() 将相对路径转化为绝对路径
path = './potter'#相对
result = os.path.abspath(path)
print(result)
# getsize() 获取文件的大小
path = './potter/harry.py'
result = os.path.getsize(path)
print(result)
#isfile() 检测是否是文件
path = './potter/harry.py'
result = os.path.isfile(path)
print(result)
#isdir() 检测是否是文件夹
result = os.path.isdir(path)
print(result) 当然还会有很多的模块内容,后面有机会我们会继续给大家分享。
需要资料也可以关注微信公众号:Python专栏,事不宜迟,一起进步吧!
