模块初始与time、datetime及random

模块初始与time、datetime及random,第1张

概述模块初始与time、datetime及random 模块初始 模块的概念(本质为一个py文件) python模块可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织 的代码段就是模块,模块在物理形式上表现为以.py结尾的代码文件 一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件 模块的文件名就是模块的名字加上扩展名.py 每个模块都有自己的名 模块初始与time、datetime及random 模块初始 模块的概念(本质为一个py文件)

python模块可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织

的代码段就是模块,模块在物理形式上表现为以.py结尾的代码文件

一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件

模块的文件名就是模块的名字加上扩展名.py

每个模块都有自己的名称空间

python允许“导入”其他模块以实现代码重用,从而也实现了将独立的代码文件组织成更大的程序系统

python中,模块也是对象

在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性

模块的分类

分为三部分:内置模块、第三方模块,自定义模块

模块的好处

分模块的好处:

避免写重复代码 可以多次利用 拿来即用 模块的导入(imort)
import time,os  # 单行导入import time   #多行导入(推介写法)import os

模块导入发生的事情

当前的名称空间中开辟一个新的空间(test) 将模块中所有的代码执行 通过模块名.进行查找函数(工具) 模块的别名
import time as t    #将time命名为tt.strftime()      # t.可直接调用函数方法# 做一兼容性choose = input(msg)if choose == "1":    import meet as telif choose == "2":    import test as t    from datetime import datetime as tfrom import 也支持重新命名
for import

导入模块中的某些方法:

from datetime import datetime# 导入模块中的某种方法

form import和import的区别:

唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了

from...import...的方式有好处也有坏处

好处:使用起来方便了 坏处:容易与当前执行文件中的名字冲突

form import执行文件与模块同名的变量,会有覆盖效果

from import as *

from import as *导入模块中未限制的所有方法

可以使用__all__进行限制

__all__=['name','read1'] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字
模块的导入顺序

内存中已经加载的模块 > 自定义模块 > 内置模块 > 第三方模块

在第一次导入某个模块时,会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用(ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看) 如果没有,解释器则会查找同名的内置模块 如果还没有找到就从sys.path给出的目录列表中依次寻找文件。
# 导入路径:# 使用相对路径:from day15.t1 import meet   # day15.t1 meet相对路径print(meet.name)# 使用绝对路径:# 错误示例:    # from r"D:\" import meet    # from ../# 正确的绝对路径:from sys import pathpath.insert(0,"D:\")   # 将导入模块的绝对路径插入系统路径中import meet   print(meet.name)

模块的两种用法:

作为脚本(在终端中运行python文件) 作为模块(导入或使用) time模块 time模块方法及用法
import timeprint(time.time())  # 当前时间,浮点数time.sleep(2)  # 休眠2秒,本质为阻塞time.strftime("%Y-%m-%d %H:%M:%s",结构化时间)   # 将结构化时间转化成字符串时间time.gmtime(时间戳)  # 将时间戳转化成格林尼治结构化时间time.mktime(结构化时间)  # 将结构化时间转化时间戳time.strptime(字符串时间,"%Y-%m-%d %H:%M:%s")  # 将字符串时间转换成结构化时间time.localtime()  # 将时间戳转化成当地的结构化时间

python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %s 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身

time模块计算两个时间的时间差:

计算时间差:import timetrue_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%s'))time_Now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%s'))dif_time=time_Now-true_timestruct_time=time.gmtime(dif_time)print('过去了%d年%d月%d天%d小时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,struct_time.tm_mday-1,struct_time.tm_hour,struct_time.tm_min,struct_time.tm_sec))

其他方法:

#结构化时间 --> %a %b %d %H:%M:%s %Y串#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串>>>time.asctime(time.localtime(1500000000))'Fri Jul 14 10:40:00 2017'>>>time.asctime()'Fri Jul 26 18:34:59 2019'#时间戳 --> %a %b %d %H:%M:%s %Y串#time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化串>>>time.ctime()'Fri Jul 26 18:34:59 2019'>>>time.ctime(1500000000)'Fri Jul 14 10:40:00 2017'
datetime模块

获取当前日期和时间:

from datetime import datetimeprint(datetime.Now())   # 获取对象数据类型为对象# 结果:'2019-07-26 18:39:46.300129'

获取指定的时间和日期:

from datetime import datetimedt = datetime(2018,5,20,13,14)print(dt)# 结果:'2018-05-20 13:14:00'

datetime与时间戳的转换:

from datetime import datetimedt = datetime.Now()new_timestamp = dt.timestamp()   # 转化成时间戳print(new_timestamp)#结果:1543931750.415896import timefrom datetime import datetimenew_timestamp = time.time()print(datetime.fromtimestamp(new_timestamp))   # 转化成datetime时间# 结果:'2019-07-26 18:46:13.833992'

str与datetime的转换:

很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

from datetime import datetimet = datetime.strptime('2018-4-1 00:00','%Y-%m-%d %H:%M')print(t)'''结果: 2018-04-01 00:00:00'''# 如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过`strftime()`实现的,同样# 需要一个日期和时间的格式化字符串:```from datetime import datetimeNow = datetime.Now()print(Now.strftime('%a,%b %d %H:%M'))# 结果:'Mon,May 05 16:28'

datetime加减:

对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+-运算符,不过需要导入timedelta这个类:

from datetime import datetime,timedeltaNow = datetime.Now()Nowdatetime.datetime(2015,18,16,57,3,540997)Now + timedelta(hours=10)datetime.datetime(2015,19,2,540997)Now - timedelta(days=1)datetime.datetime(2015,17,540997)Now + timedelta(days=2,hours=12)datetime.datetime(2015,21,4,540997)

可见,使用timedelta你可以很容易地算出前几天和后几天的时刻。

指定datetime时间:

current_time = datetime.datetime.Now()print(current_time.replace(year=1977))  # 直接调整到1977年print(current_time.replace(month=1))  # 直接调整到1月份print(current_time.replace(year=1989,month=4,day=25))  # 1989-04-25 18:49:05.898601
random模块
print(random.random())          # 0 ~ 1print(random.uniform(1,10))     # 1 ~ 10print(random.randint(1,50))     # 1 ~ 50(闭区间)print(random.randrange(1,2))    # randrange(起始,终止,步长)print(random.choice([1,])) # 选择一个元素print(random.choices([1,],k=2))   # 选择两个元素,会有重复print(random.sample((1,5),k=2))  # 选择两个元素,不会有重复(除非只有两个)lst = [1,6,7,8,9,0]random.shuffle(lst)  # 顺序打乱print(lst)
总结

以上是内存溢出为你收集整理的模块初始与time、datetime及random全部内容,希望文章能够帮你解决模块初始与time、datetime及random所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1195651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存