您的位置:首页 > 编程语言 > Python开发

python note 10

2019-04-06 11:01 95 查看
4000

# _*_ 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")

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: