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方法 生成器表达式 匿名函数 与 ...
随机推荐
- JS实现深拷贝的几种方法
引 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力. 此篇文章中也会简单阐述到栈 ...
- 51 Nod 1020 逆序排列
1020 逆序排列 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么 ...
- 学习笔记:python3,代码。小例子习作
http://www.cnblogs.com/qq21270/p/7634025.html 学习笔记:python3,一些基本语句(一些基础语法的代码,被挪到这里了) 日期和时间操作 http://b ...
- Apicloud_(项目)网上书城03_拓展模块实现
Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud_(项目)网上书城02_后端数据获取 传送门 Apicloud_(项目)网上书城03_拓展模块实现 传送门 实现商品详情页 ...
- [CSP-S模拟测试]:集合合并(记忆化搜索)
题目传送门(内部题133) 输入格式 第一行一个正整数$n$. 第二行$n$个正整数$a_i$,表示一开始有$S_i=\{a_i\}$ 输出格式 输出一个非负整数表示最大的收益之和 样例 样例输入: ...
- C++入门经典-例3.20-使用continue跳出循环
1:continue不是立即跳出循环体,而是跳过本次循环结束前的语句,回到循环的条件测试部分.代码如下: // 3.20.cpp : 定义控制台应用程序的入口点. // #include " ...
- 第十四周课程总结&记事本功能的简单实现。
(1)课程总结: 这周简单学习了下JDBC的内容: JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据. 执行流程: (1)连接数据源,如:数据库. (2)为数据库传递查 ...
- ASP.NET中的物理路径与虚拟路径
物理路径:c:\PathsAndURLs\Content\Colors.html虚拟路径:(http://localhost:53274/Content/Colors.html)路径中端口号后面的那部 ...
- 为EasyUI的dataGrid单元格增加鼠标移入移出事件
onLoadSuccess: function (data) { $(".datagrid-row").mouseover(function (e) { var text = $( ...
- 浏览器端-W3School-JavaScript:JavaScript 全局对象
ylbtech-浏览器端-W3School-JavaScript:JavaScript 全局对象 1.返回顶部 1. JavaScript 全局对象 全局属性和函数可用于所有内建的 JavaScrip ...