python模块初始与time、datetime及random

模块初始与time、datetime及random

模块初始

模块的概念(本质为一个py文件)

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

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

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

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

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

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

python中,模块也是对象

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

模块的分类

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

模块的好处

分模块的好处:

  • 避免写重复代码
  • 可以多次利用
  • 拿来即用

模块的导入(imort)

import time,os  # 单行导入
import time   #多行导入(推介写法)
import os

模块导入发生的事情

  • 当前的名称空间中开辟一个新的空间(test)
  • 将模块中所有的代码执行
  • 通过模块名.进行查找函数(工具)

模块的别名

import time as t    #将time命名为t
t.strftime()      # t.可直接调用函数方法# 做一兼容性
choose = input(msg)
if choose == "1":import meet as t
elif choose == "2":import test as tfrom datetime import datetime as t
from 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 *就这能导入列表中规定的两个名字

模块的导入顺序

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

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

模块的两种用法:

  • 作为脚本(在终端中运行python文件)
  • 作为模块(导入或使用)

time模块

time模块方法及用法

import time
print(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()  # 将时间戳转化成当地的结构化时间

1729998-20190726190513686-1764880029.jpg

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 time
true_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_time
struct_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 datetime
print(datetime.now())   # 获取对象数据类型为对象
# 结果:
'2019-07-26 18:39:46.300129'

获取指定的时间和日期:

from datetime import datetime
dt = 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 time
from 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 datetime
now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))
# 结果:
'Mon, May 05 16:28'

datetime加减:

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

from datetime import datetime, timedelta
now = datetime.now()
now
datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
now + timedelta(hours=10)
datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
now - timedelta(days=1)
datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
now + timedelta(days=2, hours=12)
datetime.datetime(2015, 5, 21, 4, 57, 3, 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 ~ 1
print(random.uniform(1,10))     # 1 ~ 10
print(random.randint(1,50))     # 1 ~ 50(闭区间)
print(random.randrange(1,5,2))    # randrange(起始,终止,步长)
print(random.choice([1,2,3,4,5,])) # 选择一个元素
print(random.choices([1,2,3,4,5,],k=2))   # 选择两个元素,会有重复
print(random.sample((1,2,3,4,5),k=2))  # 选择两个元素,不会有重复(除非只有两个)lst = [1,2,3,4,5,6,7,8,9,0]
random.shuffle(lst)  # 顺序打乱
print(lst)

转载于:https://www.cnblogs.com/lifangzheng/p/11252260.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP-面向对象编程教程

1.2 面向对象介绍 1.2.1 介绍 面向对象是一个编程思想。编程思想有面向过程和面向对象 面向过程:编程思路集中的是过程上 面向对象:编程思路集中在参与的对象 以去饭馆吃饭为例: ​ 面向过程:点菜——做菜——上菜——吃饭—…

Java生鲜电商平台-统一异常处理及架构实战

Java生鲜电商平台-统一异常处理及架构实战 补充说明:本文讲得比较细,所以篇幅较长。 请认真读完,希望读完后能对统一异常处理有一个清晰的认识。 背景 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说&…

VScode新建自定义模板快捷方式

VS新建vue文件的自定义模板 在使用vscode开发的时候,新建vue文件是不可或缺的,但是VSCode并没有vue文件的初始化模板,这个需要自定义模板。 我们可以使用vscode的snippets在新建.vue 文件后轻松获得一套模板。 具体步骤 打开VSCode -> …

cookbook_数据结构和算法

1.1将数据分解为单独的变量list_a [1,2,3,4,5,6,7,8,9] a,b,c,d,e,f,g,h,i list_a print(a,b,c,d,e,f,g,h,i) #使用相等数量的参数来接收_,b,c,d,e,f,g,h,_ list_a print(b,c,d,e,f,g,h) #不要的数据使用一个没有用的变量接收 View Code1.2从任意长度的可迭代对象中分解元素…

机器学习概览

什么是机器学习? 广义概念: 机器学习是让计算机具有学习的能力,无需明确的编程 —— 亚瑟萨缪尔,1959 工程概念: 计算机程序利用经验 E 学习任务 T,性能是 P,如果针对任务 T 的性能 P 随着经验 …

SQL on and 和 on where 的区别

on and 和 on where 的 区别 在使用 left join 时, on and 和 on where 会有区别;1. on的条件是在连接生成临时表时使用的条件,以左表为基准 ,不管on中的条件真否,都会返回左表中的记录  on 后面 and 都是对右表进行筛选 2.where是全部连接完后,对临时…

Java生鲜电商平台-缓存架构实战

Java生鲜电商平台-缓存架构实战 说明:在Java生鲜电商中,缓存起到了非常重要的作用,目前整个项目中才用的是redis做分布式缓存. 缓存集群 缓存集群存在的问题 1.热key 缓存集群中的某个key瞬间被数万甚至十万的并发请求打爆。 2.大value 某个k…

Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构

Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理&#xf…

aspx,ascx和ashx使用小结

做asp.net开发的对.aspx,.ascx和.ashx都不会陌生。关于它们,网上有很多文章介绍。“纸上得来终觉浅,绝知此事要躬行”,下面自己总结一下做个笔记。 1、.aspx Web窗体设计页面。Web窗体页由两部分组成:视觉元素(html、服…

css3 卡片hover3D效果

鼠标hover卡片 向上翻转&#xff0c;看简易代码 <!DOCTYPE html> <html> <head><title>3D Flip Card hover effects</title><style type"text/css">* {margin: 0;padding: 0;font-family: consolas;box-sizing: border-box;}bo…

Java生鲜电商平台-商城后台架构与原型图实战

Java生鲜电商平台-商城后台架构与原型图实战 说明&#xff1a;生鲜电商平台的运营平台&#xff0c;其中需要很多的功能进行管理。目前把架构与原型图实战分享给大家&#xff0c;希望对大家有用. 仪表盘/首页&#xff0c;简单统计&#xff0c;报表页&#xff0c;运营快捷口。实际…

python软件开发规范

软件开发规范 什么是软件开发规范&#xff1f; 好的设计项目目录结构&#xff0c;就和编码风格一样&#xff0c;是每个程序员都有的风格&#xff0c;但是在流水化标准化作业过程中&#xff0c;个性和风格是 不被鼓励的。如果你去维护一个非常不好读的项目&#xff0c;虽然实现逻…

vue3 echarts5 graph关系图谱 点击图例节点消失线不消失重复生成问题

const myChart ref(null);const myCharts ref(null);onMounted(() > {// 这种会导致线仍然存在 重复生成myCharts.value echarts.init(myChart.value);myCharts.value.setOption(option);});return {myChart,myCharts,}; 现象&#xff1a;如下图1 点击图例类目2&#xf…

Vue3 VSCode新建项目报错The template root requires exactly one element.

1.首先我们点击左侧第四个图标插件2.输入框搜索vetur插件3.点击设置图标&#xff0c;再点击扩展设置4.搜素vetur>validation>template&#xff0c;取消vetur>validation>template的勾选 然后就不会报错了

Java生鲜电商平台-电商支付流程架构实战

Java生鲜电商平台-电商支付流程架构实战 说明&#xff1a;我一直秉承的就是接地气的业务架构实战。我的文章都有一个这样的核心。 1. 业务场景 2. 解决问题。 3.代码实现。 4.代码重构。 5.总结与复盘。 6.缺点与防范 一、场景描述 想必大家都曾遇到过这个问题&#xff0c;在电…

vue2项目使用codemirror插件实现代码编辑器功能

1、使用npm安装依赖 npm install --save codemirror 2、在页面中放入如下代码 <template><textarea ref"mycode" class"codesql" v-model"code" style"height:200px;width:600px;"></textarea> </template>…

vue3中websocket用法

1.0 认识 websocket #1.0.1 什么是 websocket 和 http 协议类似&#xff0c;websocket 也是是一个网络通信协议&#xff0c;是用来满足前后端数据通信的。 #1.0.2 websocket 相比于 HTTP 的优势 HTTP 协议&#xff1a;客户端与服务器建立通信连接之后&#xff0c;服务器端只…

Scanner类+Random

引用数据类型的使用 数据类型 变量名 new 数据类型(); 变量名.方法名(); import java.util.Scanner; publicclass ScannerDemo01 { publicstaticvoid main(String[] args) { //创建Scanner引用类型的变量 Scanner sc new Scanner(System.in); //获取数字 System.out.print…

webpack入门进阶调优第一章

1.1何为Webpack webpack是开源的JS模块打包工具 核心功能是解决模块之间的依赖&#xff0c;吧哥哥模块按照特定的规则和顺序组织在一起&#xff0c;最终合并为一个JS文件。这个过程叫模块打包 1.2为何需要Webpack 1.2.1何为模块 在设计程序结构时&#xff0c;更好的组织方…

python类的空间问题及类之间的关系

类的空间问题及类之间的关系 类的空间问题 1.何处可以添加对象属性 class A:def __init__(self,name):self.name namedef func(self,sex):self.sex sexobj A("alex") obj.age 18 # 通过__init__方法添加 print(obj.__dict__) obj1 A("wusir") obj.fun…