第十六章模块

今日内容

  • 自定义模块

  • time模块

  • datetime模块

  • rendom模块

自定义模块

# import 模块         例:import time
# 导入的是time模块中所有的内容(变量,函数名,类名等)
# import做的三件事:
1.将文件中的所有代码读取到当前文件
2.当前文件开辟空间
3.等待被调用

# 被导入模块有独立的名称空间,定义模块中得全局变量不会产生冲突
示例:
# module_one.py
name = 'xuhuo'
def func():
  print("这是第一个模块中的函数")
   
# module_two.py
import module_one
name = 'xuyuwei'
def func():
  print('这是第二个模块的函数')
func()
module_one.func()

模块二的执行的结果:
这是第二个模块的函数
这是第一个模块中的函数

# 为模块起别名
import time as f
通过 f.name 调用   f.变量或者函数

# 导入多个模块时写法
import os
import sys
import json
# from...import..
# 自己写模块module_one 和 module_two
# module_one中导入module_two模块中的func函数
from module_two import func()

from和import的对比,from直接把导入的函数或变量直接放在当前的名称空间中。所以在当前名称空间中,直接使用名字就可以了,无需加前缀

好处:使用更方便
坏处:容易和当前执行文件中的名字冲突
# 当执行文件与模块同名的变量或者函数名,会有覆盖效果

from datetime imoirt datetime as date
d = date.now() # 获取当前时间

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

py文件的两种功能

1.脚本,一个文件就是整个程序(例如博客园登录作业等)
2.模块,文件中存放着一堆功能,用来导入使用

if __name__ == '__main__':
  func()
  print(name)
# 当被导入其他文件时不执行,只有自己运行时,才运行的调试代码,不被导入
# 用来控制.py文件在不同的应用场景下执行不用的逻辑(或者是在模块文件中测试代码)

模块的搜索路径

# 内存中已经加载的模块->内置模块->sys.path路径中包含的模块

#1.在第一次导入某个模块时(比如meet),会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用(ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看)

#2.如果没有,解释器则会查找同名的内置模块

#3.如果还没有找到就从sys.path给出的目录列表中依次寻找meet.py文件。

time模块

import time
# 这是一个时间模块,通常用于获取当前时间或时间戳等等

1.时间戳:时间戳表示的是格林尼治时间是从1970年1月1日00:00:00开始按秒计算的偏移量,每一刻都在变化(返回的是float类型)
2.格式化时间,格式化的时间字符串(1999-12-06)
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 当前时区的名称
%% %号本身
结构化时间元组(struct_time)元组共有9个元素(年,月,日,时,分,秒,一年中的第几周,一年中第几等)
import time

# 获取当前时间戳
print(time.time()) # 将时间戳转换成结构化时间,元组形式
print(time.localtime(time.time())) # 将结构化时间转换成字符串
time_t = time.localtime()
print(time.strftime('%Y-%m-%d %H:%M:%S', time_t)) # 休眠,单位秒
time.sleep(3) # 将字符串转换成结构化时间
str_time = "2019-8-22 10:11:22"
time_g = time.strptime(str_time, "%Y-%m-%d %H:%M:%S")
print(time_g) # 将结构化时间转换成时间戳
print(time.mktime(time.localtime()))
# 总结:
# time.time() 时间戳
# time.sleep() 睡眠
# time.localtime() 时间戳转结构化
# time.strftime() 结构化转字符串
# time.strptime() 字符串转结构化
# time.mktime() 结构化转时间戳
# %Y 年
# %m 月
# %d 日
# %H 时间
# %M 分钟
# %S 秒

datetime

from datetime import datetime,timedelta

# print(datetime.now())  # 获取当前时间

# 算两个时间差几天几个小时几分钟,自己指定时间
# print(datetime(2018,10,1,10,11,12) - datetime(2011,11,1,20,10,10)) # 将对象转换成时间戳
# d = datetime.now()
# print(d.timestamp()) # 将时间戳转换成显示的时间对象
# f_t = time.time()
# print(datetime.fromtimestamp(f_t)) #将对象转换成字符串
# d = datetime.now()
# print(d.strftime("%Y-%m-%d %H:%M:%S")) # 将字符串转换成对象
# s = "2018-12-31 10:11:12"
# print(datetime.strptime(s,"%Y-%m-%d %H:%M:%S")) # 可以进行加减运算
# from datetime import datetime,timedelta # 减去一天
# print(datetime.now() - timedelta(days=1)) # 减去一个小时
# print(datetime.now() - timedelta(hours=1))

random模块

import random

# 随机产生一个1-50之间的整数,包括1
print(random.randint(1,50))

# 随机产生一个0-1之间的随机小数,不包括1
print(random.randon())

# 1-10之间随机小数,不包括10
print(random.uniform(1, 10))

# 从容器中随机选择一个,参数是可迭代类型
print(random.choice((1,2,6,7,9,8)))

# 从容器中随机生成n个元素,以列表的形式返回,会出现重复元素
print(random.choices((1,7,8,6,5,48,94,43,16),k = n))

# 从容器中随机选择n个元素,以列表的形式返回,不会出现重复元素
print(random.sample((1,7,8,9,4,3,78,89,45,56),k=n)

# 随机奇数或随机的偶数
print(random.randrange(1,10,2))

lst = [1,8,9,7,45,76]
random.shuffle(lst)
# 洗牌,将有序的数据打散
print(lst)

PythonDay16的更多相关文章

  1. 路飞学城Python-Day16

  2. python-day16

    一.正则表达式 regular expression -----regex 验证匹配正则表达式使用单个字符串来描述.匹配一系列匹配某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替 ...

  3. python-day16(正式学习)

    目录 模块 什么是模块? 模块的四种形式 为什么要用模块 如何用模块 import from...import... 异同 循环导入问题 解决方案 1. 2. 模块搜索路径 random模块 模块 什 ...

随机推荐

  1. poj2386(dfs搜索水题)

    Language:Default Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42069   ...

  2. 在线PDU格式编码/解码

    在线PDU格式编码/解码 使用GSM/GPRS AT指令发送中文短信,汉字时,需要先将短信内容编码成PDU格式,然后通过AT+CMGS AT+CMGW等指令发送.     注意:需要先通过AT+CMG ...

  3. ping不通服务器就邮件警告

    ping不通服务器就发一封邮件 (单台) vim /root/scipt/1.sh #!/bin/bash ping -c 4 192.168.0.116 &> /dev/null #p ...

  4. python学习之路(14)

    通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...

  5. [CSP-S模拟测试]:最大值(数学+线段树)

    题目背景 $Maxtir$最喜欢最大值. 题目传送门(内部题128) 输入格式 第$1$行输入四个正整数$n,m,q$. 第$2$至$n+1$行中,第$i+1$行输入魔法晶石$i$的三种属性$(x_i ...

  6. Java容器——Set和顺序存储

    当Set使用自己创建的类型时,存储的顺序如何维护,在不同的Set实现中会有不同,而且它们对于在特定的Set中放置的元素类型也有不同的要求: Set(interface) 存入Set的每个元素都必须是唯 ...

  7. Spring boot之JPA

    JPA 步骤: (1)在pom.xml添加mysql,spring-data-jpa依赖 (2)在application.properties文件中配置mysql连接配置文件 (3)在applicat ...

  8. centos6 升级php版本

    配置yum源 追加CentOS 6.8的epel及remi源. # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel- ...

  9. Quartz.Net任务调度总结

    Quartz.Net使用经验总结: 学习参考的例子不错,分享一下: (1)https://www.cnblogs.com/jys509/p/4628926.html,该博文介绍比较全面 (2)http ...

  10. MySQL 建表时 date 类型的默认值设置

    在执行下面 SQL 语句时发现报错 CREATE TABLE `jc_site_access_pages` ( `access_date` date NOT NULL DEFAULT '0000-00 ...