第十四篇 装饰器和内置函数 ( 没学明白装饰器?那是因为还没看这篇文章!!! 重要的事情说3遍 )

1.装饰器:

枯燥的叙述不好懂 咱直接上公式和例子!!!

1.定义3个基本函数
2.编写闭包
3.使用闭包加工原始3个函数
4.给闭包添加权限
5.函数调用
6.使用@装饰器语法糖

第一步:1.定义3个基本函数

def index():
    print("登录")
def cart():
    print("购物页面")
def mine():
    print("个人中心")

第二步: 2.编写闭包

闭包有三要素:很重要!!!严格按照这三步写闭包

1.1 外部函数嵌套内部函数
1.2 外部函数将内部函数返回
1.3 内部函数可以访问保存外部函数的局部变量

编写闭包  给闭包添加权限
def login_require(f):
    def check():
        username = input("输入用户名")
        if username == "admin":
            f()
        else:
            print("校验失败")
    return check

第三步:3.使用闭包加工原始3个函数

index = login_require(index)
cart = login_require(cart)
mine = login_require(mine)

第四步:4.给闭包添加权限(看第二步)

第五步:5.函数调用

index()
cart()
mine()

 第六步:6.使用@装饰器语法糖

@login_require
def index():
    print("登录")
index()
@login_require
def cart():
    print("购物页面")
cart()
@login_require
def mine():
    print("个人中心")
mine()

 2.两个典型的例子:时间统计和用户校验(用户校验详情见上方)

计算时间开销:

1. 随机生成500个1,1000之间的整数,加到列表中,因为我用两种方法对列表进行升序,当第一种

方法进行升序后,列表是可变列表 已经将 l 进行了排序所以要复制粘贴一个跟原来的 l 一模一样才

能比较两种方法的时间消耗

import random
import time
l = []
for i in range(500):
    l.append(random.randint(1,1000))
l2 = [i for i in l]

2. 编写装饰器:

def time_cost(f):
    def cost():
        start = time.time()
        f()
        print("花费",time.time()-start)
    return cost

3. 编写两种升序方法的函数封装 

第一种:冒泡排序

@time_cost
def sort1():
    for i in range(len(l)-1):
        for j in range(i+1,len(l)):  # 冒泡排序
            if l[i] > l[j]:
                l[i],l[j] = l[j],l[i]
sort1()

第二种:选择排序:

@time_cost
def sort2():
    for i in range(len(l2)-1):
        min_value = i
        for j in range(i+1,len(l2)):  # 选择排序
            if l2[min_value] > l2[j]:
                min_value = j
        l2[i],l2[min_value] = l2[min_value],l2[i]
sort2()

4. 使用@装饰器语法糖

3. 内置函数:

print(len("1234567"))    计算字符串的长度
print(abs(-13))          绝对值
print(divmod(100,3))     求整除和余
print(pow(3,4))          次方 3的4次方
print(round(3.7))        四舍五入
print(sum([1,2,3,4,5]))    求和 可迭代数
print(all([0,True]))     all是当有一个为假就返回假 全部为真返回真
print(any([0,True]))    any有一个为真就为真 全部为假才为假
print(bin(20))     0b10100 将十进制转化成2进制数
print(hex(20))    0x14将十进制转化成16进制数
print(oct(88))    0o130 将十进制转化成8进制数
print(callable(lambda x:x+1))     可调用的函数、类
print(chr(90))    Z 将ASCII码值转成字符
print(ord("a"))   97 将字符转成 ASCII码值
print(sorted(["a","g","r","f","b"]))    根据ASCII码值排序
def f1():
    i = 10
    f2 = locals()    locals 返回局部变量放在字典字典中 在函数内部使用
    return f2
print(f1())
f3 = globals()      globals 返回全局变量 放在字典中
print(f3)
print 输出  input 输入 id 打印内存地址
print(max([1,3,5,7,9]))   找最大值
print(min([1,3,5,7,9]))   找最小值

内置函数详情在上方代码中  有案例有注释!!!

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值