python学习记录
学习python中·······
今天写了个装饰器用来登录用,用户名和密码是存在文件里的,涉及到了装饰器和带参数的装饰器
文件里的内容如下
{"liming": 123456}
{"zhangsan": 1234545}
类似于字典格式
装饰器代码如下
def login(t="false"):
def if_login(func):
if t == "false":
username = str(input("Please input your name: "))
password = input("Please input your password: ")
userdic = {}
with open("test.txt", 'r') as f:
for i in f.readlines():
x = eval(i)
userdic.update(x)
if username in userdic:
if password == str(userdic[username]):
print("Welcom....")
return func
else:
print("password or username error")
else:
print("password or username error1")
else:
return func
return if_login
红色代码部分思路是这样的,先定义一个空字典,然后打开文本文件,然后遍历这个文本文件,并把每次遍历出来的字符串转化为字典,并且更新到原来的空字典中,这样我们就有一个所有用户名和密码的字典了
这样的缺点是,如果是用户名和密码多的话,会浪费内存,毕竟都要加载到字典中,剩下就是判断了,就没那么麻烦了。
另外需要注意的是 3个 return,第一个return 是如果标识符是false的话需要用户登录,登陆成功后返回func也就是传入的函数,第二个return如果传入的标识符参数不是false的话直接返回func,这样用户就不用登录了,
最后一个return 是login函数的返回值,这里如果不写的话,调用后会报错,报错如下
@login("true")
def web():
print("this is a index page")
以下是报错信息
Traceback (most recent call last):
File "F:/xuexi/files.py", line 45, in <module>
@login("true")
TypeError: 'NoneType' object is not callable
因为login如果没返回值,那么就是NoneType,那么这个类型是不不可调用的,会报错,
最开始时候没写,导致出错了,还是学艺不精,需要多学习。
再来看下带参数装饰器的执行过程
@login("true")
def web():
print("this is a index page")
以上代码等价于下面的
x = login("true")
t = x(web)
t()
以上内容等价于
x 得到的返回值是if_login函数
t 得到的返回值是if_login(web)函数
最后t()得到返回值是login的返回值,感觉还是有点问题
login("true")(web)()
先传入true参数,得到if_login函数,给if_login函数传入web参数,得到if_login函数执行后的返回值,最后得到login函数的返回值
login函数得到的return结果是if_login函数整体执行结果。
if_login函数得到的return结果web函数。
if_login函数整体结果是判断内容加retrun的web函数
由此可以猜想,嵌套函数是由最内层到最外层一层层把结果返回直到最外层,但是代码执行时候,return加载顺序是由外至内,不知道正确与否
python学习记录的更多相关文章
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- Python学习记录day8
目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...
- Python学习记录day7
目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...
- Python学习记录:括号配对检测问题
Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...
- 实验楼Python学习记录_挑战字符串操作
自我学习记录 Python3 挑战实验 -- 字符串操作 目标 在/home/shiyanlou/Code创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所 ...
- 我的Python学习记录
Python日期时间处理:time模块.datetime模块 Python提供了两个标准日期时间处理模块:--time.datetime模块. 那么,这两个模块的功能有什么相同和共同之处呢? 一般来说 ...
- Python 学习记录
记录一些 学习python 的过程 -------------------------------------- 1. 初始学习 @2013年10月6日 今天开始学习python 了 遇到好多困难但是 ...
- python学习记录_IPython基础,Tab自动完成,内省,%run命令_
这是我第一次写博客,之前也有很多想法,想把自己所接触的,以文本的形式储存,总是没有及时行动.此次下定决心,想把自己所学,所遇到的问题做个记录共享给诸位,与此同时自己作为备忘,感谢各位访问我的博 ...
- Python学习记录----数据定义
摘要: 描述Python中数据定义格式,需要注意的东东. 一 数据声明 Python木有一般语言的具体数据类型,像char,int,string这些通通木有.这有点像javascript,但又不同,j ...
随机推荐
- 网络编程并发 多进程 进程池,互斥锁,信号量,IO模型
进程:程序正在执行的过程,就是一个正在执行的任务,而负责执行任务的就是cpu 操作系统:操作系统就是一个协调.管理和控制计算机硬件资源和软件资源的控制程序. 操作系统的作用: 1:隐藏丑陋复杂的硬件接 ...
- Cortex-M3 跳转到指定bin执行
跳转前指定sp和msp: #if defined(__GNUC__) __attribute__(( naked )) static void set_sp(unsigned long addr) { ...
- cocos2dx开发之util类&方法——取范围随机数
#include <random> int random(int start, int end) { //return start+rand()%(end-start+1); static ...
- BBS项目详解(forms快速创建登陆页面,登陆验证、通过阅读器进行头像上传的预览、内存管理器)
BBS项目涉及的知识点 django中知识点 钩子函数(局部钩子和全局钩子) 1.局部钩子就是用来做合法性校验,比如用户名有没有被使用等 2.全局的就是用来做对比校验,比如两次输入的密码是否一致 3. ...
- C++11如何减少内存拷贝次数
C++11中出现了很多迷人的特性.例如智能指针实现高效的内存管理,std::bind和std::function函数封装器,以及lambda实现的函数对象语法糖,都是使我着迷的地方. 而C++11最大 ...
- openstack--9--深入理解虚拟机
登录计算节点查看进程 [root@linux-node2 ~]# ps aux | grep kvm root 824 0.0 0.0 0 0 ? S< 10:19 0:00 [kvm-irqf ...
- centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目
centos7.4 实例 利用 yum 命令安装 google-chrome 超级简单(安装最新版): yum install https://dl.google.com/linux/direct/g ...
- maya中的顶点平滑算法(vertex smooth algorithm)
继上文继续写.有了顶点迭代器之后就可以利用MItMeshVertex类的getConnectedVertices方法来获取相连点并代入平滑算法. 选择什么样的平滑算法呢?本人比较懒,直接打开了计算机图 ...
- 为嵌入式全志V3s荔枝派板卡添加USB MT7601U(小米随身WIFI)驱动
折腾了了一天终于scan出环境热点了,感觉本来挺简单的事情,网上教程一大把还费了一天的劲,很丧.不过网上教程虽多,但是还还是有些不同之处的,现在特意总结一下 全志V3s荔枝派板卡 添加该驱动的过程. ...
- note 0 Python介绍及Python IDE环境安装 Spyder with Anaconda
高级语言分类 编译型语言(C/C++等) 解释型语言(BASIC.Python等) Python 诞生于1989年,创始人为吉多 范罗苏姆(Guido van Rossum) Python 语言特点 ...