1.名称空间和作用域
# 名称空间即存放变量名与值绑定关系的地方 1.内置名称空间: 启动解释器自动打开,关闭销毁. 2.全局名称空间: python文件运行则创建,结束销毁, 3.局部名称空间: 函数体代码运行时打开,结束后销毁. 作用域: 查找名字的先后顺序. 局部空间-全局空间-内置空间.
2.匿名函数、列表生成式、三元表达式
# 匿名函数就是没有名称的函数,一般不单独使用,lambda 形参1 形参2:返回值 # 列表生成式 就是将原本复杂的书写形式做一个简化 l1 = [11, 22, 33, 44, 55, 66, 77, 88] new_list = [] for i in l1: new_list.append(i*2) print(new_list) #在列表中可以支持if判断以及for循环 l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99] new_list1 = [i for i in l1 if i*2 > 60] print(new_list1)
#当if判断仅仅是二选一的情况下 可以用三元表达式 name = input('username>>>:') res = 'NB' if name == 'jason' else 'SB' print(res) 当if后面的条件成立的情况下,使用前面的结果,当if的结果不成立的情况下 使用后面的结果,由中间if 的条件做判断
两者选一个的情况中,可以简化写在一行内
3.模块
# 具有一定功能的代码集合可以是文件,也可以是多个文件的集合,称之为包 # 导入模块 import...或者from... import.. """导入模块会执行模块内代码产生一个模块的名称空间""" 重复导入只会执行一次 # 模块名起别名 import ... as 别名 from ... import ... as 别名 # 可以使用句点符来表示多层路径.只要从根目录开始就能避免出错
4.内置模块
# time模块 time.time() # 获取时间戳 time.sleep(3) # 让程序停止三秒运行. print(time.strftime('%Y-%m-%d %H:%M:%S')) # 打印时间. # datetime模块 datetime.date.today() datetime.datetime.today()
------------------------------------------------------------------------
今日内容回顾1.os模块
# 创建文件夹 # os.mkdir(r'文件夹01') # 只能创建单级目录 # os.makedirs(r'文件夹02\文件夹03') # 可以创建多级目录 # os.makedirs(r'文件夹03')
# 删除文件夹 # os.rmdir(r'文件夹01') # os.rmdir(r'文件夹02\文件夹03') # 默认只能删一级空目录 # os.removedirs(r'文件夹02\文件夹03\文件夹04') # 可以删除多级空目录
# 查看 # print(os.listdir()) # 查看该路径下所有的文件及文件夹 # print(os.listdir('F:\\')) # 查看指定路径下所有的文件及文件夹 \\为转义方式 # print(os.getcwd()) # 查看当前所在的路径 # os.chdir(r'文件夹03') # 切换当前操作路径 # print(os.getcwd()) # 查看当前所在的路径
# 判别 # print(os.path.isdir(r'a.txt')) # 判断是否是文件夹 # print(os.path.isdir(r'文件夹03')) # print(os.path.isfile(r'a.txt')) # 判断是否是文件 # print(os.path.isfile(r'文件夹03')) # print(os.path.exists(r'a.txt')) # 判断当前路径是否存在 # print(os.path.exists(r'文件夹03'))
#路径拼接:
由于mac和window操作系统不同,就用
res=os.path.join('D:\\,''123.txt')
给出两个路径系统会自动辨别
print(os.path.getsize(r'a.txt')) #显示文件大小,单位为字节数
hashlib模块
加密模块 将明文数据按照一定的逻辑编成密文数据.一般有数字和英文组成. 加密算法 将明文数据按照一定的逻辑(每个算法内部逻辑都不一样) 加密之后的密文不能反解密出明文 即是不可逆操作 # 常见加密算法:md5 base64 hmac sha系列 算法生成的密文越长表示该算法越复杂 安全级别就越高 但是在互联网的世界中是没有最安全,只有更安全
一般采用md5加密算法 # md5 = hashlib.md5() # 将待加密的数据传入算法中 # md5.update(b'530156516') # 数据必须是bytes类型(二进制)如果是中文就用encoding解码 # 获取加密之后的密文 # res = md5.hexdigest() # print(res)
加盐处理: md5.update('盐盐盐盐盐'.encode('utf8')) md5.update(b'123') # 数据必须是bytes类型(二进制) # 获取加密之后的密文 res = md5.hexdigest() print(res)
# 动态加盐 # 选择加密算法:一般情况下采用md5即可 md5 = hashlib.md5() # 将待加密的数据传入算法中 # 加盐 md5.update('不固定 随机改变'.encode('utf8')) md5.update(b'hello') # 数据必须是bytes类型(二进制) # 获取加密之后的密文 res = md5.hexdigest() print(res) #不固定的条件,可以增加当前登录时间,可以增加安全系数
random模块
#随机返回0-1之间的小数 import random print(random.random()) #随机返回一个指定区间的数字 print(random.randint(1,100)) #结果为整数 #随机返回一个结果 print(random.choices(['特等奖','一等奖','二等奖'])) #返回值为列表 print(random.choice(['一等奖','二等奖','谢谢回顾'])) # 直接返回元素 #随机抽取指定样本个数 print(random.sample([111, 222, 333, 444, 555, 666, 777], 2))#2位返回几个值 #随机打乱元素 # l = [2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A", "小王", "大王"] # random.shuffle(l) # 洗牌 # print(l)
进阶 随机验证码编程: # 产生一个五位数随机验证码 每一位都可以是数字\小写字母\大写字母 code='' for i in range(5): random_int= str(random.randint(0,9)) random_upper=chr(random.randint(65,90)) random_lower=chr(random.randint(97,122)) sct=random.choice([random_int,random_lower,random_upper]) code+=sct print(code)
logging模块
import logging file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',) logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', handlers=[file_handler,], level=logging.ERROR ) logging.error('你好') #关于记录日志的输出 仅做了解
json模块
imort json # 可以简单的理解为将其他类型转换成字符串,也可以将字符串转换成其他类型. import json d = {'username': 'jason', 'pwd': 123} d1= json.dumps(d) print(d1, type(d1)) # 序列化:将其他数据类型转换成json格式的字符串
# 但是如果是自己手打"""其格式还是''
# res1 = json.loads(res) # print(res1, type(res1)) #反序列化:将json格式字符串转换成对应语言的对应数据类型
文件序列化:
# with open(r'a.txt','w',encoding='utf8') as f: # json.dump(d,f) # 文件序列化
文件反序列化:
# with open(r'a.txt','r',encoding='utf8') as f: # res = json.load(f) # print(res,type(res))