python函数_装饰器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数_装饰器相关的知识,希望对你有一定的参考价值。

理解:

  装饰器:我在知乎看到这样一个比方(我们的函数好比内裤,作用是遮羞。但在一些特定的环境,内裤明显满足不了我们的需求,冬天它没法为我们防风御寒。所以有了长裤,装饰器就像长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效) 

  装饰器是对原函数的一种扩展,本质是一个python函数,在原函数不需要做任何代码变动的前提下增加额外功能,在场景:插入日志、性能测试、事务处理、权限校验等应用广泛。遵守封闭开放原则,对源代码修改封闭,对功能外部增加开放。


需求:

   在电商平台中,我们可以看到,在不同的页面,如选择商品、购物车、金融支付等页面都能进行登陆且能记住登陆状态,登陆一次后就不需要在其它页面再次登陆。使用装饰器把登陆抽离出来。

  1. 加入文件读写判断用户名密码
  2. 用户选择不同页面登陆时,反回不同结果

分析:

  1. 创建登陆标志位(login_falg),用来判断是否已登陆
  2. 商品commodity()金融finance()购物车shopp_cart()为三个独立函数
  3. 使用带参装饰器,反回不同结果
  4. 用户选择进行测试

代码:

#登陆标志位,用来判断是否已登陆
login_falg = True
#获取文件中的用户名密码
with open(jd_username_password,r,encoding=utf8) as f:
    str = f.read().split(,)
#带参装饰器,用于判断用户类型登陆
def login_type(type):
    def login(f):
        #修改全局变量
        global login_falg
        def type_login():
            global login_falg
            if login_falg :
                #用户输入用户名密码
                user_name = input(user_name:).strip()
                user_password = input(user_password:).strip()
                #判断用户类型
                if type == jd:
                    #判断用户名密码是否正确
                    if user_name == str[0] and user_password == str[1]:
                        print(登陆成功!)
                        f()
                        login_falg = False
                    else:
                        print(用户名密码错误,请重新输入!)
                elif type == weixin:
                    pass
                elif type == amazan:
                    pass
            else:
                print(用户已登陆!)
        return type_login
    return login

#商品
@login_type(jd)
def commodity():
    print(商品功能)
    pass

#金融
@login_type(weixin)
def finance():
    print(金融功能)
    pass

#购物车
@login_type(amazan)
def shopp_cart():
    print(购物车功能)
    pass

#用户选择类型进行测试
while(True):
    user_type = input(请选择类型:\n1:[商品]\n2:[金融支付]\n3:[购物车]).strip()
    if user_type == 1:
        commodity()
    elif user_type == 2:
        finance()
    elif user_type == 3:
        shopp_cart()
    else:
        print(输入非法,请重新输入!)

 

以上是关于python函数_装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python不归路_装饰器

python_装饰器

Python基础之装饰器

Python函数-装饰器

Python装饰器

Python全栈__函数的有用信息带参数的装饰器多个装饰器装饰一个函数