装饰器的练习

1.判断用户权限

['root','admin','redhat']

1.user in [] (先判断用户是否有权限登陆)

2.user+vip (再判断用户是否是有特殊权限)

import functools
import inspect
login_session = ['root','admin','redhat']
def is_login(fun):
    @functools.wraps(fun)
    def warapper(*args,**kwargs):
        if args[0] in login_session:
            temp = fun(*args,**kwargs)
            return temp
        else:
            print('Error:用户%s 没有登陆成功' %(args[0]))
    return warapper
def is_admin(fun):
    @functools.wraps(fun)
    def wrapper(*args,**kwargs):
        inspect_res = inspect.getcallargs(fun,*args,**kwargs)
        print('inspect的返回值是:%s' %(inspect_res))
        if inspect_res.get('name') == 'root':
            temp = fun(*args,**kwargs)
            return temp
        else:
            print('not root user,no permisson add user')
    return wrapper

@is_login
@is_admin
def add_user(name): # is_login((is_admin(adduser)) is_login(wrapper())
    print('add_user')

add_user('haha')

当输入非法用户时:

当输入一般用户时:

当输入拥有特殊权限的用户时:

2. 编写装饰器required_ints, 条件如下:

1). 确保函数接收到的每一个参数都是整数;

2). 如果参数不是整形数, 打印 TypeError:参数必须为整形

import functools
def required_ints(func):
    @functools.wraps(func)
    def wrapper(*args,**kwargs):
        for i in args:
            if not  isinstance(i,int):
                print('函数所有的参数并非都是int型')
                break
        else:
            res = func(*args,**kwargs)
            return res
    return wrapper
@required_ints
def add(a,b):
    return a+b
@required_ints
def mymax(a,b,c,d):
    return max(a,b,c,d)

print(add(1,5))

发布了74 篇原创文章 · 获赞 7 · 访问量 3013

猜你喜欢

转载自blog.csdn.net/qq_42806574/article/details/103939645
今日推荐