python note 10
# _*_ coding: utf-8 _*_
#装饰器——装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能
#装饰器的返回值也是一个函数对象(函数的指针)
#应用场景:插入日志、性能测试、事务处理、权限校验等等
#1.如何定义装饰器函数
"""
def 装饰器函数的名称(修饰的函数):
def 嵌套函数(不定长的位置参数,不定长的关键字参数):
修饰和校验的代码块
return 修饰的函数(不定长的位置参数,不定长的关键字参数)
return 嵌套函数
"""
def log1(func):
def wrapper(*args,**kwargs):
print("欢迎大家使用装饰器log1!")
return func(*args,**kwargs)
return wrapper
def log2(func):
def wrapper(*args,**kwargs):
print("欢迎大家使用装饰器log2!")
return func(*args,**kwargs)
return wrapper
@log1 #调用装饰器
@log2
def hello():
print("hello world!")
hello()
# _*_ coding: utf-8
from prettyprinter import cpprint
#用户登录权限校验
"""
会员数据
编号 账号 密码
1 zhangsan zhangsan123
2 lisi lisi123
3 wangwu wangwu123
"""
users=[
{"id":1,"name":"zhangsan","pwd":"zhangsan123"},
{"id":2,"name":"lisi","pwd":"lisi123"},
{"id":3,"name":"wangwu","pwd":"wangwu123"}
]
cpprint(users)
"""
会员中心所有的功能需要登录以后才能进行访问
"""
#会员中心发布功能
def publish(title,content,name="",pwd=""):
current_user=filter(
lambda v:v["name"]==name and v["pwd"]==pwd,#过滤符合条件的信息
users
)
if len(list(current_user))==1:
print("标题:{};内容:{}".format(title,content))
else:
print("请输入账号和密码,登录后可发布信息!")
#会员中心个人资料
def index(name="",pwd=""):
current_user = filter(
lambda v: v["name"] == name and v["pwd"] == pwd, # 过滤符合条件的信息
users
)
if len(list(current_user)) == 1:
print("欢迎,{}".format(name))
else:
print("请输入正确账号和密码,登录后可以访问!")
publish("标题1","内容1")
publish("标题2","内容2","张三","张三123")
publish("标题3","内容3","zhangsan","zhangsan123")
# _*_ coding: utf-8
from prettyprinter import cpprint
# 用户登录权限校验
"""
会员数据
编号 账号 密码
1 zhangsan zhangsan123
2 lisi lisi123
3 wangwu wangwu123
"""
users = [
{"id": 1, "name": "zhangsan", "pwd": "zhangsan123"},
{"id": 2, "name": "lisi", "pwd": "lisi123"},
{"id": 3, "name": "wangwu", "pwd": "wangwu123"}
]
cpprint(users)
"""
会员中心所有的功能需要登录以后才能进行访问
代码重复部分可以提到装饰器里面进行定义
装饰器作用:提高代码的重用性,减少工作量,增强可维护性!
"""
# 定义一个登录权限校验的装饰器函数
def login_auth(f):
# *args不定长位置参数
# **kwargs不定长关键字参数
def check_name_and_pwd(*args, **kwargs):
# print(f)
# print(args,kwargs)
if "name" in kwargs and "pwd" in kwargs:
name, pwd = kwargs["name"], kwargs["pwd"]
else:
name, pwd = None, None
current_user = filter(
lambda v: v["name"] == name and v["pwd"] == pwd, # 过滤符合条件的信息
users
)
if len(list(current_user)) == 1:
return f(*args, **kwargs)
else:
print("请输入正确账号和密码,登录后可以访问!")
return check_name_and_pwd
# 会员中心发布功能
@login_auth
def publish(title, content, name="", pwd=""):
print("标题:{};内容:{}".format(title, content))
# 会员中心个人资料
@login_auth
def index(name="", pwd=""):
print("欢迎,{}".format(name))
publish("标题1","内容1")
publish("标题2","内容2",name="张三",pwd="张三123")
publish("标题3","内容3",name="zhangsan",pwd="zhangsan123")
index(name="lisi", pwd="lisi123")
- Python 语言及其应用 Chapter_10 Note_2 目录
- Python 语言及其应用 Chapter_10 Note 3 时间time
- Python 语言及其应用 Chapter_10 Note_1 文件和路径
- 实战microPython(10)-蓝牙模块的使用
- Note1: windows下Python IDE(Eclipse+Pydev)
- python 手记10 『笨方法学python 习题31』
- Python+Selenium中级篇之10-Python中的继承的使用
- Python天天美味(10) - 除法小技巧
- python学习笔记10
- python 学习笔记 if语句(10)
- Windows 10中python2和python3共存
- Python小白丁笔记(10)------元组、列表、集合
- Python每日练习 10 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-)
- 10 种机器学习算法的要点(附 Python 和 R 代码)
- day_10 python面试题更改
- 解决 win10 pycurl安装出错 Command "python setup.py egg_info" failed with error code 10
- (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二
- Python 入门教程 10 ---- Student Becomes the Teacher
- Python 核心编程笔记_Chapter_2 Note_3_赋值与变量_字符串_列表list_元组tuple_字典dict
- Python 入门教程 10 ---- Student Becomes the Teacher