PythonDay14
第十四章装饰器
装饰器
# 开放封闭原则
- 1.对扩展是开放的
- 2.对修改是封闭的
# 在不修改源代码和调用方式的情况下,对函数进行扩展
# 第一版装饰器
def times(func):
def foo():
print('装饰001')
func()
print('装饰002')
return foo
def func1():
print("今天是个好日子1")
func1 = times(func1)
func1()
# python内置的语法糖
# 要将语法糖放在被装饰的函数正上方
def times(func):
def foo():
print('装饰001')
func()
print('装饰002')
return foo
@times
def func1(): # func1 = times(func1)
print("被装饰的函数1")
@times
def func2(): # func2 = times(func2)
print("被装饰的函数2")
func1()
# 有参数的函数语法糖
def func(func):
def foo(*args, **kwargs):
print('装饰001')
func(*args, **kwargs)
print('装饰002')
return foo
@func
def func1(*args, **kwargs):
print(args,kwargs)
print('被装饰的函数1')
@func
def func2(*args, **kwargs):
print(args,kwargs)
print('被装饰的函数2')
func2(5)
# 要求
#博客园登陆之后有几个页面,diary,comment,home,如果我要访问这几个页面,必须验证我是否已登录。 如果已经#成功登录,那么这几个页面我都可以无阻力访问。如果没有登录,任何一个页面都不可以访问,我必须先登录,登录成功#之后,才可以访问这个页面。
user_status = {
'user_name': None,
'user_status': False
}
def auth(func):
def foo():
if user_status['user_status']:
ret = func()
return ret
user_name = input('name:')
user_pwd = input('pwd:')
if user_name == 'xuhuo' and user_pwd == '123456':
user_status['user_status'] = True
ret = func()
return ret
return foo
@auth
def zhu_ye():
print('欢迎来到博客园主页。')
@auth
def dirary():
print('欢迎来到博客园的日记页面。')
@auth
def ping_lun():
print('欢迎来到评论页面。')
@auth
def sui_bi():
print('欢迎来到随笔页面。')
zhu_ye()
sui_bi()
dirary()
ping_lun()
PythonDay14的更多相关文章
- Python--day14(迭代器)
今日主要内容 1. 带参装饰器 (了了解) 2. 迭代器(*****) 可迭代对象 迭代器对象 for迭代器 枚举对象 1. 带参装饰器 1. 通常,装饰器为被装饰的函数添加新功能,需要外界的 ...
- python---day14( 内置函数二)
内置函数二一:匿名函数 lambda函数 lambda 表示匿名函数,不需要用def 来申明. 语法: 函数名=lambda 参数:返回值 ----〉 案例:f=lambda n:n*n 例子01: ...
- 路飞学城Python-Day14(practise)
本章总结 练习题 1.logging模块有几个日志级别? 5个,按级别从高到低分别是 CRITICAL(灾难)>ERROR(错误)>WARNING(警示)>INFO(信息)>D ...
- 路飞学城Python-Day14
转载:python之路-路飞学城-python-book [25.常用模块-logging模块详解] [26.常用模块-logging模块详解2] [27.常用模块-logging模块日志过滤和日志文 ...
- python-day14(正式学习)
目录 三元表达式 列表推导式 字典生成式 zip()方法 生成器 yield关键字 迭代套迭代 send(value) close() throw() 自定义range方法 生成器表达式 匿名函数 与 ...
随机推荐
- Fiona简介
Fiona是一个python地理空间处理库,类似于OGR
- node.js实现web解析dns
var http = require('http'), //服务器创建 dns = require('dns'), //DNS查询,主要负责解析当前DNS域名,返回DNS服务器IP地址 fs = re ...
- JavaWeb-SpringBoot_使用H2数据库实现用户注册登录
使用Gradle编译项目 传送门 前端资源同:使用MySQL数据库实现用户管理_demo 传送门 H2:SpringBoot内置持久化数据库 使用H2数据库实现用户注册登录 用户可以在index.h ...
- Alibaba DataX 源码编译
Alibaba DataX 源码编译 标签(空格分隔): ETL DataX简介 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负 ...
- localhost与127.0.0.1的区别是什么?
localhost与127.0.0.1的区别是什么?都代表本地服务器 相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析. 看来这个问题还有人不清楚,其实这 ...
- 自动化部署脚本--linux执行sh脚本
自动化部署脚本文件目录: 运行主程序:./install.sh #!/bin/bash SCRIPTPATH=$(cd "$(dirname "$0")"; p ...
- EPPlus生成Excel表格(只支持2007及以上)
主要来源: https://www.cnblogs.com/rumeng/p/3785748.html http://epplus.codeplex.com/ FileInfo newFile = n ...
- OpenCV学习笔记(5)——颜色空间转换
学习如歌对图像进行颜色空间转换,从BGR到灰度图,或者从BGR到HSV等 创建一个程序用来从一幅图像中获取某个特定颜色的物体 1.转换颜色空间 OpenCV中有超过150种进行颜色空间转化的方法,但是 ...
- Spring Cloud负载均衡:使用Feign作客户端负载均衡
有了一篇服务端负载均衡后,再来一篇客户端负载均衡,客户端负载均衡很简单,无需在zuul中做多余配置(本示例不引入zuul),只需要在客户端进行Feign引入和配置即可. 准备工作很简单,实现客户端负载 ...
- Vue+Python 电商实战
安装webStorm https://blog.csdn.net/qq_38845858/article/details/89850737 安装NodeJs http://nodejs.cn/do ...