Python初学者第二十三天 函数进阶装饰器

Posted fany-mok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python初学者第二十三天 函数进阶装饰器相关的知识,希望对你有一定的参考价值。

23day

装饰器:

1、用户不执行前不调用函数,在调用的时候再执行函数

a、传函数时不加参数

user_status = False  # 用户登录了就把这个改成True
def login(func):
    def inner():
        _username = ‘alex‘
        _password = ‘abc123‘
        global user_status
        if user_status == False:
            username = input("user:")
            password = input("password:")
            if username == _username and password == _password:
                print("welcome login...")
                user_status = True
            else:
                print("wrong username or password!")

            if user_status:
                func()
    return  inner
@login
def home1():
    print("首页1")
@login   #等值于 home2 = login(home2)
def home2():
    print("首页2")
@login
def home3():
    print("首页3")
home1()
home2()
home3()

技术分享图片

b、传函数时增加参数:

注:可以使用非固定函数*args、**kwargs。当传参数给函数时,取参数。不给函数传参数,则不取

 1 user_status = False  # 用户登录了就把这个改成True
 2 def login(func):
 3     def inner(*args,**kwargs):
 4         _username = alex
 5         _password = abc123
 6         global user_status
 7         if user_status == False:
 8             username = input("user:")
 9             password = input("password:")
10             if username == _username and password == _password:
11                 print("welcome login...")
12                 user_status = True
13             else:
14                 print("wrong username or password!")
15 
16             if user_status:
17                 func(*args,**kwargs)
18     return  inner
19 @login
20 def home1():
21     print("首页1")
22 # @login   #等值于 home2 = login(home2)
23 def home2(n):
24     print("首页2",n)
25 
26 def home3():
27     print("首页3")
28 home1()
29 home2(3p)
30 home3()

技术分享图片

c、带参数的装饰器

可在外函数与内函数之间再套一层过度函数

user_status = False  # 用户登录了就把这个改成True
def login(func):
    def outer(func):
        def inner(*args,**kwargs):
            _username = alex
            _password = abc123
            global user_status
            if user_status == False:
                username = input("user:")
                password = input("password:")
                if username == _username and password == _password:
                    print("welcome login...")
                    user_status = True
                else:
                    print("wrong username or password!")

                if user_status:
                    func(*args,**kwargs)
        return  inner
    return outer

@login(qq) #先执行login(‘qq‘) 再将login(‘qq‘)@到home1
def home1():
    print("首页1")
# @login   #等值于 home2 = login(home2)
def home2(n):
    print("首页2",n)

def home3():
    print("首页3")
home1()
home2(3p)
home3()

技术分享图片

 

以上是关于Python初学者第二十三天 函数进阶装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python 基础第二十三天(反射)

Python之第二十三天的努力--函数总结

第二十三天

python学习第十三天:带参数装饰器和迭代器

二十三Python 中 property() 函数及 @property 装饰器的使用

第二十三天