概念
一个包含python代码的文件就是一个模块。
作用
创建模块
模块本身就是一个文件,所有py代码都可以在文件中直接书写。不过我们开发共用模块时,最好在模块中书写以下内容。
变量 模块中的属性值
函数 单独的功能
类 相似功能组合
模块测试代码 临时使用,被导入时不会执行
注意:
1.模块名称遵循标识符。
2.模块只有第一次被导入的时候执行,多次导入不会执行。
例:one_model.py是一个简单的模块,这个模块的功能就是打招呼。
模块导入的方式有以下多种
import 模块名
作用:直接导入模块
import 模块 as 别名
如果模块的名称太长,我们可以这个模块起一个别名。
import sys,os,time
import sys,os,time
from … import …局部导入方式
当使用模块中的部分功能的时候,就可以使用局部导入方式。
from 模块 import 某个函数或者类。
作用:直接导入模块中的某个函数或者某个类或变量
注意:如果当前文件中的变量或者函数名称和模块中的名称重复,会使用就近原则。
支持导入多行
from my_module import read1,read2,money
from … import … as 别名
当导入的模块和当前模块中的名称相同的时候可以起别名进行区分。
from my_module import read1 as read
**from 模块 import ***
from my_module import * 把my_module中所有的不是以下划线(_)开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差。
作用:直接导入模块中的所有方法和类和变量
注意:如果my_module.py中的名字前加_,即_money,则from my_module import *,则_money不能被导入
all 属性
all = [变量1,变量2 …] 设置导入模块的功能。
all=[‘money’,‘read1’]
#这样在另外一个文件中用from my_module import *就这能导入列表中规定的两个名字
python查找模块的路径时,我们先来了解一下python中有些什么样的模块。在python中,模块主要有:
路径搜索优先级:
内建模块>自定义模块>系统标准模块>第三方模块
pyc临时文件
为了提高加载模块的速度,python解释器会在__pycache__目录中下缓存每个模块编译后的版本,之后,再次被导入时,实际上导入的是这个.pyc的临时文件。
把模块当做脚本运行
我们可以通过模块的全局变量__name__来查看模块名:
当做脚本运行:
name 的值 等于’main’
当做模块导入:
__name__的值等于模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if name == ‘main’:
pass
产生随机数
(1)随机小数
1.random()
- 产生大于0且小于1之间的小数
2.uniform(a,b)
2. 随机整数
def v_code():
code = ''
for i in range(4):
num = random.randint(0, 9) # 生成数字
alf = chr(random.randint(65, 90)) # 生成字母
# 字母和数字选择一个
add = random.choice([num, alf])
# 拼接
code = "".join([code, str(add)])
return code
code = v_code()
print(code)
练习2:数字炸弹
import random, time
bomb = random.randint(0, 99)
start = 0
end = 99
# 1,2,3,4,5,6,7,8,9,10
while True:
people = int(input('请输入{}到{}之间的数字'.format(start, end)))
if people > bomb:
print('man-->>大了...')
end = people - 1
elif people < bomb:
print('man--->小了...')
start = people + 1
else:
print('BOMING!!!')
break
print('等待电脑输入{}到{}之间的数字'.format(start, end))
time.sleep(2)
computer = random.randint(start, end)
print('电脑输入了{}'.format(computer))
if computer > bomb:
print('computer-->>大了...')
end = computer - 1
elif computer < bomb:
print('computer--->小了...')
start = computer + 1
else:
print('bommmmmm!!!')
break
print('数字炸弹-->', bomb)
在python中,通常有这三种方式来表示时间:
时间戳、时间元组(struct_time)、格式化的时间字符串。
时间戳(timestamp) :
时间戳表示的是从1970年1月1日00:00:00开始到现在的秒值。返回的是float类型。
格式化的时间字符串(Format String): ‘1999-12-06’
时间元组(struct_time) :
struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一周的第几日,一年中第几天,夏令时。
小结:
时间戳是计算机能够识别的时间;
时间字符串是人能够看懂的时间;
时间元组则是用来操作时间的;
格式化的时间字符串(Format String)表示方式: ‘1999-1-06’
%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 当前时区的名称
%% %号本身
1. time.sleep()
睡眠功能,让程序等待多少s后再执行。
2. 时间戳
time.time()
时间戳表示的是从1970年1月1日00:00:00开始到现在的秒值。返回的是float类型。
3. 时间元组
time.localtime()
4. 时间字符串格式化
time.strftime(’%Y-%m-%d %H:%M:%S’)
时间戳和时间元组之间的转换
1. 时间戳转换为时间元组
time.gmtime() 和 time.localtime()
time.gmtime() 返回的是UTC时间与北京时间少8小时。
UTC 协调世界时,又称世界统一时间,世界标准时间,国际协调时间,简称UTC。
Time.localtime() 当地时间
时间元组和格式化字符串之间的转换
1. 时间元组转换为字符串
time.strftime(“格式定义”,“结构化时间”) 结构化时间参数若不传,则显示当前时间
time.strptime(时间字符串,字符串对应格式)
时间元组 --> %a %b %d %H:%M:%S %Y时间串
time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串
# true_time = time.mktime(time.strptime('2019-09-11 08:30:00', '%Y-%m-%d %H:%M:%S'))
# time_now = time.mktime(time.strptime('2017-09-12 11:30:00', '%Y-%m-%d %H:%M:%S'))
# dif_time = time_now - true_time
# print(dif_time)
使用os模块对文件进行一些相关操作
1. 重命名文件
3. 创建目录
创建目录 mkdir()
6. 删除多级目录
若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推。
如果上一层目录不为空则停止删除文件。如果file04不为空则报错。
**7. 获取当前所在目录 **
8. 获取目录列表