day16 模块
1. 自定义模块 注意被调用模块是否有 __all__ = [ ]
- 定义: 模块就是就是文件,存放一堆常用的函数
- 模块分类:
- 1.内置模块(标准库):python解释器自带的,如time模块,os模块
- 2.第三方模块(各种大神写的):需要额外下载(pypi网站)
- 3.自定义模块(自己写的):不需要额外下载
- 模块的好处
- 1.避免写重复代码
- 2.可以多次利用
- 3.拿来主义,提升开发效率
1.1 import (导入) 的使用 和 from 文件名 import 单个变量或函数
-
-
倒入发生的事情
1.在当前的名称空间中开辟一个新的空间(text)
2.将模块所有代码执行
3.通过模块名,进行查找函数(工具)
-
-
- 多个import只执行一次
例如:构建一个text.py文件,在其他文件中调用
import text import text print("你好啊") import text 执行结果: 这是一个自定义模块 你好啊
-
- 查看是否已经导入 locals() (查看当前空间中的变量) globals() 查看全局空间中的变量
print(locals())
-
-
第一次导入模块执行三件事
1.创建一个以模块名命名的名称空间
2.执行这个名称空间(即导入的模块)里面的代码
3.通过此模块名+点(.) 调用 ,[与全局没有冲突]
例如
import text name = "宝元" print(text.name) print(name) 结果 这是一个自定义模块 这是一个水果箱 宝元
-
5.为模块起别名 import + 文件名 + as + 新名字
好处:1.将很长的模块名改成很短,方便使用
2.有利于代码的扩展和优化
例如:
msg = """
1.扳手
2.螺丝刀
>>>
"""
choose = input(msg)
if choose == "1":
import text
text.func()
elif choose == "2":
import test
test.func()
例如2:
msg = """
1.扳手
2.螺丝刀
>>>
"""
choose = input(msg)
if choose == "1":
import text as t
elif choose == "2":
import test as t
t.func()
-
**from 文件名 import 单个函数或变量 **
好处: 不用全部导入,占用内存小
缺点: 会和当前文件定义的变量或者函数发生冲突
name = "宝元"
from text import name
print(name)
结果:
这是一个text工具箱
alex #被覆盖了
from text import name
name = "宝元"
print(name)
结果:
这是一个text工具箱
宝元 #被覆盖了
解决方法
name = "宝元"
from text import name as t
print(t)
print(name)
结果:
这是一个text工具箱
alex
宝元
-
**from 文件名 import *** (*代表全部调用)
name = "宝元" def func(): print("is 一个特大号的钳子") from text import * print(name) func() 结果: 这是一个text工具箱 alex is 18号扳手
![
name = "宝元"
def func():
print("is 一个特大号的钳子")
from text import *
print(name)
func()
结果:
这是一个text工具箱
宝元
is 一个特大号的钳子
-
循环导入的问题
import test #day16练习 print(test.name)
import day16练习 #text name = "alex" # 说明书 print("这是一个text工具箱")
import text #test name = "alex" # 说明书 print("这是一个test工具箱")
9.测试
在当前模块中使用__name__ 就是 "__main__"
当模块被导入的时候__name__就是被导入的模块名
10.导入路径
相对路径
绝对路径
from sys import path
path.insert(0,"E:\")
import text
print(text.name)
2. time 模块
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 当前时区的名称
%% %号本身
import time
-
1.时间戳:表示格林尼治时间从1970年1月1日00:00:00开始按秒计算到现在的时间,是float类型,浮点数
import time time.time() print(time.time()) 结果: 1564050362.5780344
-
格式化字符串时间: 格式化的时间字符串(Format String): ‘2019-07-25’
-
print(type(time.strftime("%Y-%m-%d %H:%M:%S"))) # 给人看的 print(time.strftime("%Y-%m-%d %H:%M:%S")) print(time.gmtime()) # 结构化时间 数据类型是是命名元组 print(time.gmtime()[0]) print(time.gmtime().tm_year) 结果 <class 'str'> 2019-07-25 19:27:12 time.struct_time(tm_year=2019, tm_mon=7, tm_mday=25, tm_hour=11, tm_min=27, tm_sec=12, tm_wday=3, tm_yday=206, tm_isdst=0) 2019 2019
-
时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
-
将时间戳转换为字符串时间
-
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 给人看的,当地时间 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(time.time()))) #格林尼治时间 结果: 2019-07-25 19:40:24 2019-07-25 11:40:24
-
将字符串时间转换成时间戳
-
print(time.mktime(time.strptime("2019-07-25 19:36:36","%Y-%m-%d %H:%M:%S"))) 结果: 1564054596.0
-
格式化时间
-
time.strftime("格式化","结构化时间") print(time.strptime("2019-07-25 19:36:36","%Y-%m-%d %H:%M:%S")) 结果: time.struct_time(tm_year=2019, tm_mon=7, tm_mday=25, tm_hour=19, tm_min=36, tm_sec=36, tm_wday=3, tm_yday=206, tm_isdst=-1) time.strptime("字符串","格式化")
3. datetime 模块
4. random 模块
![
全部双引号