- 带参数的装饰器讲解
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# 1、带参数的装饰器
def wrapper_out(parameter):
print(parameter)
def wrapper(func):
def inner(*args, **kwargs):
ret = func(*args, **kwargs)
return ret
return inner
return wrapper
"""
@wrapper_out('企鹅') 分析解读:
当函数执行到带参数装饰器 @wrapper_out('企鹅') 这句时,分两步执行:
1.执行wrapper_out('企鹅')这个函数,把相应的参数'微信'传给parameter,并且得到返回值wrapper函数名
2.将@与wrapper结合,得到我们之前熟悉的标准版的装饰器,按照装饰器的执行流程执行。
"""
@wrapper_out('企鹅')
def qq():
print('成功登录企鹅!')
qq()
- 带参数装饰器的应用
# 2、带参数装饰器应用:
"""
两个不同软件微信和淘宝,有不同的账户和密码,
根据不同软件的登录,写个装饰器验证登录功能
账户文件名:wechat,账户albert|123
账户文件名:taobao,账户don|456
"""
def wrapper_out(parameter):
def wrapper(func):
def inner(*args, **kwargs):
if parameter == 'wechat':
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
with open('wechat', encoding='utf-8', mode='r') as f:
for line in f:
user, pwd = line.strip().split('|')
if user == username and pwd == password:
ret = func(*args, **kwargs)
return ret
return False
elif parameter == 'taobao':
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
with open('taobao', encoding='utf-8', mode='r') as f:
for line in f:
user, pwd = line.strip().split('|')
if user == username and pwd == password:
ret = func(*args, **kwargs)
return ret
return False
return inner
return wrapper
@wrapper_out('wechat')
def wechat():
print('成功登录微信!')
wechat()
@wrapper_out('taobao')
def taobao():
print("成功登录淘宝!!!")
taobao()
- 带参数装饰器应用最终版:(优化版)
# 3、带参数装饰器应用:优化版
"""
两个不同软件微信和淘宝,有不同的账户和密码,
根据不同软件的登录,写个装饰器验证登录功能
账户文件名:wechat,账户albert|123
账户文件名:taobao,账户don|456
"""
def wrapper_out(parameter):
def wrapper(func):
def inner(*args, **kwargs):
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
# 注意文件名需要与装饰器传入参数一致,增强耦合性思想
with open(parameter, encoding='utf-8', mode='r') as f:
for line in f:
user, pwd = line.strip().split('|')
if user == username and pwd == password:
ret = func(*args, **kwargs)
return ret
return False
return inner
return wrapper
@wrapper_out('wechat')
def wechat():
print('成功登录微信!')
wechat()
@wrapper_out('taobao')
def taobao():
print("成功登录淘宝!!!")
taobao()
版权声明:本文为m0_57787326原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。