函数闭包为函数加上认证功能

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的更多相关文章

  1. python学习-42 装饰器 --- 函数闭包1

    函数闭包举例: def father(name): print('hello world') def son(): print('儿子说:我的爸爸是%s' % name) def grandfson( ...

  2. python学习之装饰器-

    python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...

  3. Python学习 :装饰器

    装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...

  4. python基础(8)-装饰器函数&进阶

    从小例子进入装饰器 统计一个函数执行耗时 原始版本 import time # time模块有提供时间相关函数 def do_something(): print("do_something ...

  5. python学习笔记--装饰器

    1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来 ...

  6. Python学习笔记--装饰器的实验

    装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢? 我们实验一下,先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date ...

  7. 6月4日 python学习总结 装饰器复习

    1.  装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2.  装饰器的基本 ...

  8. Python学习笔记: 装饰器Decorator

    介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数f ...

  9. python学习-41 装饰器 -- 高阶函数

    装饰器:本质就是函数.是为其他函数添加附加功能的. 原则:1.不修改被修饰函数的源代码2.不修改被修饰函数的调用方式 --- 装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 高阶函数 1.高阶函数 ...

随机推荐

  1. cropper.js移动端使用

    cropper.js移动端使用 一.总结 一句话总结: 启示:找对关键词,找对相关方面的应用,效果真的非常好 比如 cropper.js移动端使用,这样设置了(dragMode: 'move',//拖 ...

  2. Spring 源码学习之环境搭建

    一.下载Spring 源码 进入 https://github.com/spring-projects/spring-framework/tags 选择下载spring freamework的版本 h ...

  3. python 与开源Gis 书本知识点测试

    # -*- coding: utf-8 -*- print(u"python与开源QGis课题研究组")#print("汉字") #++++++++++++++ ...

  4. Understanding glibc malloc

    https://wooyun.js.org/drops/深入理解%20glibc%20malloc.html https://sploitfun.wordpress.com/2015/02/10/un ...

  5. jvm 命令使用调优 通过jstat、jmap对java程序进行性能调优

    转载:http://blog.csdn.net/jerry024/article/details/8507589 转载: https://blog.csdn.net/zhaozheng7758/art ...

  6. Andorid SQLite数据库开发基础教程(2)

    Andorid SQLite数据库开发基础教程(2) 数据库生成方式 数据库的生成有两种方式,一种是使用数据库管理工具生成的数据库,我们将此类数据库称为预设数据库,另一种是使用代码生成的数据库.

  7. 【转载】 clusterdata-2011-2 谷歌集群数据分析(二)--task_usage

    原文地址: https://blog.csdn.net/yangss123/article/details/78298749 由于原文声明其原创文章不得允许不可转载,故这里没有转载其正文内容. --- ...

  8. training 2

    Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.136 Average Precision (AP) @[ IoU ...

  9. Win10+Ubuntu18.04安装双系统

    一:相关资料 (一)Win10+Ubuntu18.04 亲测UEFI启动模式双硬盘+双系统成功安装经验(文章) (二)如何安装Linux与windows双系统?(视频) 推荐先看视频,之后按照文章进行 ...

  10. URL相关的工具类

    package com.opslab.util.web; import com.opslab.util.CharUtil;import com.opslab.util.CharsetUtil;impo ...