码迷,mamicode.com
首页 > 编程语言 > 详细

python函数_装饰器

时间:2017-08-29 11:15:58      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:ret   创建   金融   print   pen   变量   插入   logs   while   

理解:

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

  装饰器是对原函数的一种扩展,本质是一个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函数_装饰器

标签:ret   创建   金融   print   pen   变量   插入   logs   while   

原文地址:http://www.cnblogs.com/liuneng/p/7447012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!