day14

装饰器

装饰器本质就是闭包

开放封闭原则:

扩展是开放的(增加新功能),对源码是封闭的(修改已经实现的功能)

装饰器:用来装饰的工具

作用:在不改变源代码及调用方式的基础下额外增加新的功能

应用(面试的时候): 登录认证、日志

​ 增加一些功能

​ 校验用户登录的时候

​ 面向对象

语法糖 -- 甜:@+函数名

语法糖必须放在被装饰的函数正上方

# import time
# def times(f):
# def inner():
# start_time = time.time()
# f()
# print(time.time() - start_time)
# return inner
# def foo():
# time.sleep(1)
# print('我是立业,我快!')
# foo = times(foo)
# foo() # def wrapper(f):
# def inner(*args,**kwargs):
# f(*args,**kwargs)
# return inner
# def func(*args,**kwargs):
# print(f"这是{args,kwargs}函数")
# func = wrapper(func)
# func('alex','sir')
版一
# import time
# start_time = time.time()
# def func():
# time.sleep(1)
# print('我要飞')
# func()
# print(time.time() - start_time)
版二
# def times(f):
# start_time = time.time()
# f()
# print(time.time() - start_time)
#
# def foo():
# time.sleep(1)
# print('小明')
#
# def func():
# time.sleep(1)
# print('章超印')
# s = func
# func = times
# func(s) # s = foo
# foo = times
# foo(s)
版三
# def times(f):
# def inner():
# start_time = time.time()
# f()
# print(time.time() - start_time)
# return inner
#
# def foo():
# time.sleep(1)
# print('小明')
# foo = times(foo)
# foo() # def wrapper():
# def inner():
# print(1)
# return inner
# wrapper()() # def wrapper():
# def inner(f):
# print(f)
# return inner
#
# def func():
# print('小明')
# func = wrapper()
# func('alex')
版四
# def wrapper(f):
# def inner(*args,**kwargs):
# f(*args,**kwargs)
# return inner
# def func(*args,**kwargs):
# print(f'{args,kwargs}')
# func = wrapper(func)
# func(1,2,2,3,4,5,5,a=1,b=2) # import time
# def wrapper(f):
# def inner(*args,**kwargs):
# start_time = time.time()
# f(*args,**kwargs)
# print((time.time() - start_time))
# return inner
# def func(*args,**kwargs):
# print(f'{args,kwargs}')
# time.sleep(1)
# func = wrapper(func)
# func(1,2,3,4,54,5,a = 1, b =2)
版五
# import time
# def wrapper(f):
# def inner(*args,**kwargs):
# start_time = time.time()
# print(f(*args,**kwargs))
# return time.time() - start_time
# return inner
# @wrapper
# def func(*args,**kwargs):
# time.sleep(1)
# print(f'{args,kwargs}')
# return 'alex'
# @wrapper
# def foo(*args,**kwargs):
# time.sleep(1)
# print(f'{args,kwargs}')
# print(func(1,2,3,4,54,5,a = 1, b =2))
# print(foo(1523,2,541,5165,12,6,a='alex',b='eeeee'))
标准版
def func(a): #a是要被装饰的函数名
def foo(*args,**kwargs):
"装饰之前的操作"
ret = a(*args,**kwargs)
"装饰之后的操作"
return ret
return foo
@func
def f1(*args,**kwargs):
print(f"这是一个{args}")
return "我可以返回了"
print(f1(1,2,3,34,4,5,a=1))
博客园
# login_dic = {
# "username": None,
# "flag": False
# }
# def auth(f):
# def inner(*args,**kwargs):
# if login_dic["flag"]:
# return f()
# else:
# return login()
# return inner
# @auth
# def index():
# print(f"这是{login_dic['username']}主页")
# return "主页没有内容"
# def login():
# print("这是一个登录页面")
# user = input("username:")
# pwd = input("password:")
# if user == "baoyuan" and pwd == "baoyuan123":
# login_dic["flag"] = True
# login_dic["username"] = user
# return "登录成功!"
# else:
# return "用户名或密码错误!"
# @auth
# def comment():
# print(f"这是{login_dic['username']}评论")
#
# while not login_dic["flag"]:
# print(comment())

day14——装饰器的更多相关文章

  1. python学习day14 装饰器(二)&模块

    装饰器(二)&模块 #普通装饰器基本格式 def wrapper(func): def inner(): pass return func() return inner def func(): ...

  2. day14 装饰器

    装饰器 本质上就是函数,功能是为其他函数添加附加功能 原则:不修改被修饰函数的源代码,以及调用方式,即完全不能有任何改变 装饰器 = 高阶函数+ 函数嵌套+ 闭包 高阶函数:函数作为参数或者返回一个函 ...

  3. day14 装饰器模拟验证附加功能

    user_list=[ {'}, {'}, {'}, {'}, ] current_dic={'username':None,'login':False} def auth_func(func): d ...

  4. day14 带参装饰器、迭代器、生成器

    """ 今日内容: 1.带参装饰器及warps 2.迭代器 3.生成器 """ """ # 一.带参装饰器及w ...

  5. day14带参装饰器,迭代器,可迭代对象 , 迭代器对象 ,for迭代器 , 枚举对象

    复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰 ...

  6. day-14带参装饰器、迭代器

    带参装饰器 通常,装饰器为被装饰的函数添加新功能,需要外界的参数  -- outer参数固定一个,就是func -- inner参数固定同被装饰的函数,也不能添加新参数 -- 可以借助函数的嵌套定义, ...

  7. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  8. day14(带参装饰器,迭代器,生成器,枚举对象)

    一,复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 ...

  9. python27期day14:有参装饰器、多个装饰器装饰一个函数、递归、作业题

    1.有参装饰器:给装饰器添加一个参数.来控制装饰器的行为. @auth(参数) auth里层的函数名 = auth(参数) 被装饰的函数名 = auth里层的函数名(被装饰的函数名) 被装饰的函数名( ...

随机推荐

  1. 《dream》

    <dream- 梦想> I don't know what that dream is that you have, I don't care how disappointing it m ...

  2. Mac上安装Python3虚拟环境(VirtualEnv)教程

    如果已经安装好pip3,那么执行命令安装virtualenv环境 pip3 install virtualenv 安装完成检测版本是否安装成功 virtualenv --version 创建新目录 M ...

  3. java8 新特性parallelStream 修改默认多线程数量

    parallelStream默认使用了fork-join框架,其默认线程数是CPU核心数. 通过测试实践,发现有两种方法来修改默认的多线程数量: 1.全局设置 在运行代码之前,加入如下代码: Syst ...

  4. 分布式系统 与 Google

    google 论文 http://duanple.com/?p=170 google 论文与开源 http://duanple.com/?p=1096 分布式系统论文集 https://github. ...

  5. 【Gamma】Scrum Meeting 3

    目录 写在前面 进度情况 任务进度表 Gamma阶段燃尽图 照片 写在前面 例会时间:5.27 22:30-23:30 例会地点:微信群语音通话 代码进度记录github在这里 临近期末,团队成员课程 ...

  6. python操作mysql基础一

    python操作mysql基础一 使用Python操作MySQL的一些基本方法 前奏 为了能操作数据库, 首先我们要有一个数据库, 所以要首先安装Mysql, 然后创建一个测试数据库python_te ...

  7. CMU Advanced DB System - MVCC

    https://zhuanlan.zhihu.com/p/40208895 Mysql的MVCC实现 https://severalnines.com/database-blog/comparing- ...

  8. chmod: changing permissions of ‘/etc/fstab': Read-only file system

    给passwd文件加权限,修改/etc/fstab目录下所有的文件夹属性为可写可读可执行,执行以下命令:chomd 777 /etc/fstab 的时候提示错误: chmod: changing pe ...

  9. CORS跨域带来的preflight request

    CORS跨域带来的preflight request https://blog.csdn.net/baidu_35407267/article/details/79043515 HTTPS://blo ...

  10. 解决window的bat脚本执行出现中文乱码的问题

    window下通过新建txt文件然后改成.bat的文件,输入内容后,执行出现中文乱码?原因: 批处理文件,是以ANSI编码方式.若以别的方式(如UTF-8)编辑了批处理,转换成ANSI格式即可,正常创 ...