python基础学习路线:
· 数据分析之python基础篇{基础语法}
· 数据分析之python基础篇{数据类型}
· 数据分析之python基础篇{控制流语句}
· 数据分析之python基础篇{函数}
· 数据分析之python基础篇{模块}
· 数据分析之python基础篇{文件操作}
· 数据分析之python基础篇{Pymysql}
· 数据分析之python基础篇{面向对象}
在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import
关键字引入math
这个模块,下面就来了解一下Python中的模块。
说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
- Python 模块(Module),是一个 Python 文件,以
.py
结尾,包含了 Python 对象定义和Python语句。 - 模块让你能够有逻辑地组织你的 Python 代码段。
- 把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
- 模块能定义函数,类和变量,模块里也能包含可执行的代码
import
在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。形如:import module1,mudule2...
当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。
在调用math模块中的函数时,必须这样引用:模块名.函数名
import math
math.sqrt(4)
运行结果:2.0
# 一次导入多个包
import math,random,time
from…import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:from 模块名 import 函数名1,函数名2....
# 从整个math包里面只导入这四个函数
from math import sin,cos,tan,degrees
sin(10)
cos(1)
运行结果:-0.5440211108893699
0.5403023058681398
from math import * # * 匹配 ,代表所有函数都导进来
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
注意:通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。
想一想: 为什么加上模块名调用更合理呢?
答: 因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名
as
模块名称太长了,不方便输入,可以设置一个别名
import math as m
m.ceil(5.1)
运行结果:6
常用模块
这里简单介绍datetime时间模块和time时间模块,介绍在数据分析中经常用到的一些功能,详细介绍,请大家移步:Python之日期与时间处理模块
datetime时间模块
datetime模块提供了处理日期和时间的类,既有简单的方式,又有复杂的方式。它虽然支持日期和时间算法,但其实现的重点是为输出格式化和操作提供高效的属性提取功能。
from datetime import datetime
# 这里注意, 如果使用的是语法import datetime
# 则导入整个datetime包, 要使用datetime.datetime才能够使用
now = datetime.now() #返回指定时区日期时间的datetime对象
print(now)
运行结果:2021-06-29 14:24:13.031632
datetime(2020,4,1) # 生成一个时间数据
运行结果:datetime.datetime(2020, 4, 1, 0, 0)
from datetime import datetime
# 这里注意, 如果使用的是语法import datetime
# 则导入整个datetime包, 要使用datetime.datetime才能够使用
now = datetime.now() #返回指定时区日期时间的datetime对象
#取出时间中的某一部分
now.year
now.month
now.day
datetime与时间戳
电脑中的时间由cpu储存, 所以一般叫做cpu时间.cpu时间是计算从1970年1月1日0点0分到目前这个时间点所经历的的秒数什么?你说1970年以前的时间, 那当然就是负的啦,
那么时间戳和datetime之间如何转换呢?把一个datetime类型转换为timestamp需要调用timestamp()
方法,时间戳转换成时间需要调用fromtimestamp()
方法
datetime.now().timestamp()
运行结果:1624948872.775596
时间戳最重要的用途就是,可以计算出cpu的运行时间,借此来推算出程序的效率。
a_time = datetime.now().timestamp()
datetime.now().timestamp() - a_time
运行时间:25.669857025146484
# 时间戳转换成时间
datetime.fromtimestamp(1530892800)# 括号内为秒数,从1970年1月1日0点
# 或者可以这样写
datetime_test = 150000000
datetime.fromtimestamp(datetime_test)
运行结果:datetime.datetime(2018, 7, 7, 0, 0)
datetime.datetime(1974, 10, 3, 10, 40)
str转换为datetime
很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()
实现,需要一个日期和时间的格式化字符串:datetime.strptime(<时间字符串>,<你输入格式>)
datetime.strptime('2008:12:01 3:24:12','%Y:%m:%d %H:%M:%S')
运行时间:datetime.datetime(2008, 12, 1, 3, 24, 12)
time = input("请输入你想查询的时间: 格式为:'%Y-%m-%d %H:%M:%S' ")
c = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')
print(c)
运行结果:请输入你想查询的时间: 格式为:'%Y-%m-%d %H:%M:%S' 2001-12-01 12:02:28
2001-12-01 12:02:28
datetime转换为str
如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()
实现的,同样需要一个日期和时间的格式化字符串:
from datetime import datetime
now = datetime.now()
now.strftime('%Y------%d ======= %H')
运行结果:'2021------29 ======= 14'
now.strftime('%y-%m-%d %H:%M:%S')
now.strftime('%Y %m %d')
运行结果:'21-06-29 14:53:34'
'2021 06 29'
time时间模块
&esmp; time的sleep()
方法可以规定程序每次休息几秒钟
import time
for i in range(5):
print(i)
time.sleep(2) # 每次休息2秒钟
time获取当前时间用asctime()
方法,time()
方法可以获取当前的时间戳
time.asctime() # 获取当前时间
time.time() #获取当前时间戳
time模块应用
计算一段代码执行时间
# 在运行之前,记录一个开始时间
start_time = time.time()
num = 0
for i in range(1,100000001):
num+=i
print(num)
# 运行之后,用当前时间,减去刚来记下来的开始时间
print(time.time() - start_time , 's')
运行结果:5000000050000000
14.545671224594116 s
random模块
import random
# 返回一个随机小数
print(random.random())
# 返回(1-5)随机整型数据
print(random.randint(1,5))
# 返回(1-10)随机数据
print(random.randrange(1,10))
#随机打乱列表
L = [1,2,3,4,5]
random.shuffle(L)
#随机数种子,即想要生存随机数,又想要大家生存的随机数一样
random.seed(100) # 100个人生成随机数都一样
小练习:
# 验证码:大写字母和数字的组合,
# 36个元素 26个 10个
for i range(4):
# 生成1-36的随机数
n = random.randint(1,36)
#判断这个数字是否大于11
if n < 11:
t = random.randint(0,9)
else:
# 随机生成65到90范围的数字,因为在ASCII码中 65对应A ,90对应Z
t = chr(random.randint(65,90))
#每次生成一个
#拼接到s上面来
s += t
print(s)