名字空间
1. 三种
Local: 局部命名空间
查看: locals()
Global : 全局命名空间, 只要在全局命名空间中的内容到处都能使用
查看: globals()
__name__: 模块名, 如果是主执行文件 值为 __main__
__builtins__: 内建名字空间对象,用于查看内建名字空间中的内容的
__file__: 当前文件的绝对路径
# 动态获取当前文件所在的目录
import os
print(os.path.dirname(__file__))
Built-in: 内建命名空间, 内建中的所有内容到处都能使用
查看: dir(__builtins__)
内容: int,list,tuple,str,max,min,sum,range,len,super,locals,globals
作用域
1. 作用域的分类
局部作用域(Local): 作用范围为当前函数内容
闭包作用域(Enclosing): 作用范围为函数中的子函数中(函数嵌套)
全局作用域(Global): 作用范围全局
内建作用域(Builtin): 作用范围全局
作用域: 指成员(变量,函数,类,方法)的使用范围
2. 成员的查找顺序: L>E>G>B
3. 指定操作对应作用域中的成员
在函数内修改全局的成员, 使用 global 全局变量名 引入之后才能修改
在子函数中修改闭包变量, 使用 nonlocal 闭包变量 引入闭包变量才能修改
装饰器
1. 概念:本质也是一个函数, 用于加强原函数, 这个函数就是装饰器
备注: 原函数功能不变的情况进行加强
2. 如何实现装饰器函数
1. 定义一个函数
2. 接收原函数作为参数
3. 新增新功能
3. 装饰器的使用
def 装饰器函数(原函数):
pass
@装饰器函数 # 语法糖 类方法,静态方法 装饰器的使用
def 原函数():
pass
随机数模块
导入随机模块
import random
接口名称 类型 说明
random.random() 实数相关 用于生成一个0到1的随机浮点数: [0, 1)
random.uniform(a,b) 生成[a,b]或[b,a]之间的均匀分布随机浮点数
random.randint(a,b) 整数相关 生成[a,b]的随机整数,要求a < b
random.randrange(a,b) 生成[a,b)的随机整数,第三个参数可以指定步长
random.choice(seq) 序列相关 从序列中随机选择一个元素,若序列为空,则抛出异常
random.shuffle(seqb) 打乱原序列,原序列必须可写
random.sample(seq,k) 从序列中随机选择k个元素返回,原序列不变
random.seed(n=none) 初始化 初始化随机熵池
时间模块 time
1. 概念
主要有两个模块非常重要, time和datetime模块
time模块: 基于计算机底层时钟实现的模块. 计算机时间是默认使用4个字节存储, 这个时间也就是
时间戳. 21亿秒--->2038年
datetime高级模块: 对于time模块的二次封装和改进, 表示 0000-9999 年
2. time模块
语法:
import time
time.time() : 获取当前时间戳
time.sleep(秒) : 让程序休眠多少秒(让出cpu)
时间模块 datetime
1. 概念
主要有两个模块非常重要, time和datetime模块
time模块: 基于计算机底层时钟实现的模块. 计算机时间是默认使用4个字节存储, 这个时间也就是
时间戳. 21亿秒--->2038年
datetime高级模块: 对于time模块的二次封装和改进, 表示 0000-9999 年
2. time模块
语法:
import time
time.time() : 获取当前时间戳
time.sleep(秒) : 让程序休眠多少秒(让出cpu)
3. datetime模块
该模块上有两个重要的类, datetime类和timedelta类
语法:
from datetime import datetime,timedelta
使用:
datetime类的使用
datetime.now() : 创建当前时间对象
datetime(year=2020,month=1,day=8......) : 创建指定时间对象
datetime.strptime(): 将字符串转换会时间对象
# 时间对象上的方法
时间对象.year
时间对象.month
时间对象.day
时间对象.strftime() # 将时间对象进行字符串格式,用于自定义时间展示
时间模块 timedelta
1. 概念
主要有两个模块非常重要, time和datetime模块
time模块: 基于计算机底层时钟实现的模块. 计算机时间是默认使用4个字节存储, 这个时间也就是
时间戳. 21亿秒--->2038年
datetime高级模块: 对于time模块的二次封装和改进, 表示 0000-9999 年
2. time模块
语法:
import time
time.time() : 获取当前时间戳
time.sleep(秒) : 让程序休眠多少秒(让出cpu)
3. datetime模块
该模块上有两个重要的类, datetime类和timedelta类
语法:
from datetime import datetime,timedelta
使用:
datetime类的使用
datetime.now() : 创建当前时间对象
datetime(year=2020,month=1,day=8......) : 创建指定时间对象
datetime.strptime(): 将字符串转换会时间对象
# 时间对象上的方法
时间对象.year
时间对象.month
时间对象.day
时间对象.strftime() # 将时间对象进行字符串格式,用于自定义时间展示
timedelta类: 用于处理时间对象之间的差(时间计算), 时间跨度类
创建对象的方式:
1. 两时间对象相减
2. 创建跨度对象
timedelta(days=100)
哈希散列
1. 哈希散列 是一种算法, 用于对数据进行加密, 生成固定长度小量的数据, 是原数据的唯一识别码.
注意: 哈希散列算法是不可逆的算法
2. 用处:
a. 密码加密
b. 软件生成md5码进行比对安全.
3. 常见的算法
a. md5
b. sha (名称来自于安全散列算法2(Secure Hash Algorithm 2))
4. 算法的使用步骤
a. 导入算法库模块
import hashlib
b. 准备需要加密的数据(二进制)
1. b"字符串"
2. 变量名.encode("utf-8")
3. 读取文件的时候采用rb
c. 创建算法对象
h=hashlib.md5(二进制数据)
h=hashlib.sha256(二进制数据)
h=hashlib.sha512(二进制数据)
d. 获取加密结果
h.hexdigest()