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
2.作用域
1. 作用域的分类
局部作用域(Local): 作用范围为当前函数内容
闭包作用域(Enclosing): 作用范围为函数中的子函数中(函数嵌套)
全局作用域(Global): 作用范围全局
内建作用域(Builtin): 作用范围全局
作用域: 指成员(变量,函数,类,方法)的使用范围
2. 成员的查找顺序: L>E>G>B
3. 指定操作对应作用域中的成员
在函数内修改全局的成员, 使用 global 全局变量名 引入之后才能修改
在子函数中修改闭包变量, 使用 nonlocal 闭包变量 引入闭包变量才能修改
3.装饰器
. 概念:本质也是一个函数, 用于加强原函数, 这个函数就是装饰器
备注: 原函数功能不变的情况进行加强
2. 如何实现装饰器函数
1. 定义一个函数
2. 接收原函数作为参数
3. 新增新功能
3. 装饰器的使用
def 装饰器函数(原函数):
pass
@装饰器函数 # 语法糖 类方法,静态方法 装饰器的使用
def 原函数():
pass
import time
# 装饰器函数 : 统计一个函数的运算时间
def decorator(old_func): # 传入原函数
# 新定义一个子函数,将子函数返回
def inner():
# 新增功能
# 原函数功能不变量
start = time.time() # 开始时间
res = old_func() # 调用原函数
end = time.time() # 结束时间
print("函数运行时间:", end - start)
# 返回结果
return res
# 返回函数体
return inner
# 原函数
@decorator # 装饰器使用
def count(): # 求和
# 模拟运行时间长
c = 0
for i in range(100000000):
c += i
return c
# 装饰器使用
# count = decorator(count)
result = count()
print(result)
# result = count()
4.随机模块
导入随机模块
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) 初始化 初始化随机熵池。
#随机抽取4位验证码
#引用模块 所有英语字母,包含大小写
import string
#字符串拼接
tmp=string.ascii_letters+'0123456789'
#建立一个空字符串
code=''
#遍历
for i in range(4):
#遍历出来的元素随机选择一个元素,放入空字符串
code+=random.choice(tmp)
#输出
print(code)在这里插入代码片
5.时间模块—time
1. 概念
主要有两个模块非常重要, time和datetime模块
time模块: 基于计算机底层时钟实现的模块. 计算机时间是默认使用4个字节存储, 这个时间也就是
时间戳. 21亿秒--->2038年
datetime高级模块: 对于time模块的二次封装和改进, 表示 0000-9999 年
2. time模块
语法:
import time
time.time() : 获取当前时间戳
time.sleep(秒) : 让程序休眠多少秒(让出cpu)
"""
6.时间模块—datetime
datetime模块
该模块上有两个重要的类, datetime类和timedelta类
语法:
from datetime import datetime,timedelta
使用:
datetime类的使用
datetime.now() : 创建当前时间对象
datetime(year=2020,month=1,day=8......) : 创建指定时间对象
datetime.strptime(): 将字符串转换会时间对象
# 时间对象上的方法
时间对象.year
时间对象.month
时间对象.day
时间对象.strftime() # 将时间对象进行字符串格式,用于自定义时间展示
# 案例: 时钟
import time
while True:
print("\r当前时间:{}".format(datetime.now().strftime("%H:%M:%S")),end="")
time.sleep(1)
7.时间模块—timedelta
timedelta类: 用于处理时间对象之间的差(时间计算), 时间跨度类
创建对象的方式:
1. 两时间对象相减
2. 创建跨度对象
timedelta(days=100)
# 案例: 计算离国庆离多少天
# 2020 10 1 - 2020 1 8
from datetime import datetime,timedelta
days = datetime(year=2020,month=10,day=1) - datetime.now()
print(days)
# print(dir(days))
print(days.seconds)
print(days.total_seconds())
# 案例: 计算100天后的日期
future = datetime.now() + timedelta(days=100)
print(future)
8.哈希散列
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()
#判断执行文件
#导入算法库模块
import hashlib
#准备需要加密的数据
#打开文件
fp=open('F:\pythoncode\课后练习\\20200108课后代码\微信.lnk','rb')
#读取全部
data=fp.read()
#关闭文件
fp.close()
#创建算法对象
h=hashlib.md5(data)
#获取加密结果
result=h.hexdigest()
#输出
print(result)
#查看长度
print(len(result))