python学习-43 装饰器 -- 函数闭包2
函数闭包为函数加上认证功能
1.登陆账号
user_dic ={'username':None,'login':False}
def auth_func(func):
def wrapper(*args,**kwargs):
if user_dic['username'] and user_dic['login']:
res = func(*args,**kwargs)
return res
username = input('账号:').strip()
passwd = input('密码:').strip()
if username == 'abcd' and passwd == '':
user_dic['username'] = username
user_dic['login'] = True
print('登陆成功!')
res=func(*args,**kwargs)
return res
else:
print('用户名或密码错误')
return wrapper
@auth_func
def index():
print('欢迎光临本网站')
@auth_func
def home(name):
print('欢迎%s回家' % name)
index()
home('小明')
运行结果:
账号:abcd
密码:123456
登陆成功!
欢迎小明回家 Process finished with exit code 0
2.检测已有账号登陆
user_list=[{'name':'abcd','passwd':''},
{'name':'abd','passwd':''},
{'name':'acc','passwd':''},
{'name':'asdfg','passwd':''}
]
user_dac ={'username':None,'login':False} # 获取刚开始登陆之前的状态
def auth_func(func):
def wrapper(*args,**kwargs):
if user_dac['username'] and user_dac['login']: # 获取刚开始登陆之前的状态,是否已登录
res = func(*args,**kwargs)
return res
username = input('账号:').strip()
passwd = input('密码:').strip()
for user_dic in user_list:
if username == user_dic['name'] and passwd == user_dic['passwd']:
user_dac['username'] = username
user_dac['login'] = True
print('登陆成功!')
res=func(*args,**kwargs)
return res
else:
print('用户名或密码错误')
return wrapper
@auth_func
def index():
print('欢迎光临本网站')
@auth_func
def home(name):
print('欢迎%s回家' % name)
index()
home('sb')
运行结果:
账号:abd
密码:123
登陆成功!
欢迎光临本网站
欢迎sb回家 Process finished with exit code 0
python学习-43 装饰器 -- 函数闭包2的更多相关文章
- python学习-42 装饰器 --- 函数闭包1
函数闭包举例: def father(name): print('hello world') def son(): print('儿子说:我的爸爸是%s' % name) def grandfson( ...
- python学习之装饰器-
python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...
- Python学习 :装饰器
装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...
- python基础(8)-装饰器函数&进阶
从小例子进入装饰器 统计一个函数执行耗时 原始版本 import time # time模块有提供时间相关函数 def do_something(): print("do_something ...
- python学习笔记--装饰器
1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来 ...
- Python学习笔记--装饰器的实验
装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢? 我们实验一下,先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date ...
- 6月4日 python学习总结 装饰器复习
1. 装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2. 装饰器的基本 ...
- Python学习笔记: 装饰器Decorator
介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数f ...
- python学习-41 装饰器 -- 高阶函数
装饰器:本质就是函数.是为其他函数添加附加功能的. 原则:1.不修改被修饰函数的源代码2.不修改被修饰函数的调用方式 --- 装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 高阶函数 1.高阶函数 ...
随机推荐
- DH密钥加解密
一.概述 1.与对称加密算法的主要差别在于,加密和解密的密钥不相同,一个公开(公钥),一个保密(私钥).主要解决了对称加密算法密钥分配管理的问题,提高了算法安全性. 2.非对称加密算法的加密.解密的效 ...
- ubuntu之路——day10.2单一数字评估指标与满足和优化的评估指标
单一数字评估指标: 我们在平时常用到的模型评估指标是精度(accuracy)和错误率(error rate),错误率是:分类错误的样本数站样本总数的比例,即E=n/m(如果在m个样本中有n个样本分类错 ...
- sql中的表值函数与标量值函数区别与用法
通俗来讲: 听名字就知道区别了 表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂:标量值函数返回的只是一个值 一 .表值函数又分为内联函数与多语句函数 (1 ...
- Flink 之 写入数据到 ElasticSearch
前面 FLink 的文章中我们已经介绍了说 Flink 已经有很多自带的 Connector. 1.<从0到1学习Flink>—— Data Source 介绍 2.<从0到1学习F ...
- OptaPlanner 试验
OptaPlanner - Constraint satisfaction solver (Java™, Open Source)https://www.optaplanner.org/ jboss/ ...
- Spring 接口日志 AOP
接口日志记录AOP实现-LogAspect - 91博客it技术开发者 - 博客园https://www.cnblogs.com/007sx/p/5810818.html Spring AOP(一) ...
- 软件定义网络基础---OpenFlow协议
一:OpenFlow协议概述 OpenFlow协议为控制器与交换机之间的通信,提供了一种开放标准的方式.OpenFlow交换机通过安全通道与控制器进行信息交互 二:OpenFlow消息类型 (一)co ...
- bat批处理文件怎么将路径添加到path环境变量中
bat批处理文件怎么将路径添加到path环境变量中 摘自:https://zhidao.baidu.com/question/1887763143433391788.html 永久性的: @echo ...
- docker镜像的导入导出
docker save > nginx.tar nginx:latest docker load < nginx.tar
- Flink 滑动窗口使用触发器会触发多个窗口的计算
之前有小伙伴在群里说:滑动窗口使用触发器让每条数据都触发一次计算 但是他并没有得到预期的结果:每条数据都触发一次计算,输出一条结果,而是每天数据都输出了很多条结果 为什么会这样呢? 写了个小案例,来解 ...