装饰器


通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能。

不改变函数的源代码、调用方式、返回值等,给函数增加新功能。

经典案例:登录装饰器,

def login_decorator(func):def inner():if USER_TEMP["status"] == False:print("\033[31;1m用户未登录,请先登录\033[0m")login_atm()func()return inner@login_decoratordef withdrawals():print("取款函数。。。。")

说白了,给函数增加新功能,就是把这个函数当作参数传到另一个函数里面。

生成器


通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。

如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值:

>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>> next(g)
25
>>> next(g)
36
>>> next(g)
49
>>> next(g)
64
>>> next(g)
81
>>> next(g)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration

如果生成器中没有更过元素时,调用next(g)会抛出StopIteration的错误

所以,我们创建了一个generator后,基本上永远不会调用next(),而是通过for循环来迭代它,并且不需要关心StopIteration的错误:

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)
...
0
1
4
9
16
25
36
49
64
81

正则表达式


re模块。常用正则表达式符号:

'.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$'     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
'*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb''ab''a']
'+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab''abb']
'?'     匹配前一个字符1次或0
'{m}'   匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb''ab''abb']
'|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)' 分组匹配,re.search("(abc){2}a(123|456)c""abcabca456c").group() 结果 abcabca456c
'\A'    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z'    匹配字符结尾,同$
'\d'    匹配数字0-9
'\D'    匹配非数字
'\w'    匹配[A-Za-z0-9]
'\W'    匹配非[A-Za-z0-9]
's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'

常用语法函数:

re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub      匹配字符并替换

转载于:https://blog.51cto.com/8097612/1966424

Python学习之路-装饰器生成器正则表达式相关推荐

  1. python正则表达式生成器_Python学习之路-装饰器生成器正则表达式

    装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器,def login_decorator(fun ...

  2. Python学习之路--装饰器

    三元运算 变量 = 条件返回True的结果 if 条件 else 条件返回False ,用于简单 import time time.time() 1970年至今多少秒 time.sleep()暂时休眠 ...

  3. Python学习之路——装饰器

    开放封闭原则:不改变调用方式与源代码上增加功能 ''' 1.不能修改被装饰对象(函数)的源代码(封闭) 2.不能更改被修饰对象(函数)的调用方式,且能达到增加功能的效果(开放) ''' View Co ...

  4. [转载] Python学习笔记——用装饰器decorator和Memoization记忆化提高效率,原理讲清楚了

    参考链接: 在Python中使用装饰器进行记忆 Python学习笔记--用装饰器decorator和Memoization记忆化提高效率 装饰器Memoization记忆化运用`functools`中 ...

  5. python学习笔记(装饰器、迭代器生成器、内置函数、软件目录开发规范)

    装饰器 定义:本质是函数,(功能:装饰其他函数):就是为其他函数添加附加功能 模拟场景一,在现有的函数中增加某个功能.现有的做法是定义新函数,并且加入函数中.需要修改源代码. def logger() ...

  6. Python学习笔记:装饰器

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. [转载] python学习笔记——@property装饰器

    参考链接: Python @property装饰器 上篇:https://blog.csdn.net/qq_42489308/article/details/89423412 @property装饰器 ...

  8. python学习笔记之——装饰器及对象

    1.反射之__import__ 我们知道import语句是用来导入外部模块的,当然还有from...import...也可以,但是其实import实际上是使用builtin函数__import__来工 ...

  9. python学习笔记之装饰器、递归、算法(第四天)

    参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...

最新文章

  1. 一文带你看懂Spring事务!
  2. telnet WIN7 不回显的解决办法
  3. QT的QFrame类的使用
  4. ReactNative的基本组件的认识
  5. netty的Helloworld---netty学习笔记
  6. Hibernate架构概述
  7. Android学习笔记(二)基础知识(1)
  8. linux drbd同步,DRBD数据镜像主备节点同步数据
  9. bokeh python_Python Bokeh数据可视化教程
  10. php imagick gif,PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
  11. LeetCode.206. Reverse Linked List(反转有序链表)C++ and PYTHON
  12. 5分钟学会如何玩转云数据库组件(迁移,审计,订阅)
  13. 124.二叉树中的最大路径和
  14. 基于用户行为分析建立用户偏好模型
  15. [html] 微软雅黑是有版权的,在页面中使用font-family:Microsoft YaHei会不会有版权问题呢?
  16. 剑指 Offer 24. 反转链表
  17. 无刷新假象   实现简易文件上传
  18. 2019.3.9 提高B组 T1 JZOJ 4742 单峰
  19. 微信开发者工具登录时tunneling socket could not be established
  20. 卷积神经网络三:目标检测和yolo算法

热门文章

  1. 【解决】联想thinkpad E40 如何禁用触摸板
  2. solrCloud异常
  3. multiplexed pins
  4. 关于routerOS设置PPPOE与HOTSPOT并存的说明
  5. 全面对比,深度解析 Ignite 与 Spark
  6. React中如何优雅的捕捉事件错误
  7. 记一次通过c#运用GraphQL调用Github api
  8. leftjoin及多个leftjoin执行顺序
  9. 加密界又一响声:WhatsApp宣布对所有通讯信息进行端到端加密
  10. Spring(五):SpringStruts2Hibernate整合后,实现查询Employee信息