python高级---名字空间,作用域,装饰器,随机模块,时间模块,哈希散列

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()	实数相关	用于生成一个01的随机浮点数: [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-99992. 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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值