参考文献:http://www.cnblogs.com/alex3714/articles/5143440.html

迭代器: 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退。另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件。

特点:
  • 访问者不需要关心迭代器内部的结构,仅需通过__next__()获取下一段内容
  • 不能随机访问集合中的某个值,只能从头到尾依次访问
  • 访问到一半时不能往回退
  • 便于循环比较大的数据集合,节省内存
生成一个迭代器:
>>> a = iter([1,2,3,4,5,])
>>> a
<list_iterator object at 0x0000013D1A8082E8>
>>> a.__next__()
1
>>> a.__next__()
2
>>> a.__next__()
3
生成器:一个函数调用时返回一个迭代器,这个函数就叫做生成器,如果函数中包含yield语法,那这个函数就会变成生成器。
 
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def cash_money(amount):
while amount>0:
amount -= 100
yield 100
print('你来啦!')
a = cash_money(500)
print(type(a))
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())

执行结果:

<class 'generator'>
100
你来啦!
100
你来啦!
100
你来啦!
100
你来啦!
100

装饰器:
装饰器这部分虽然大概看明白了是怎么用,但是很难总结是一个什么样的东西,以我的理解我是把它定义为在不改变原代码的情况下对原函数进行包装和扩展,根据需求为原函数添加更多的功能。
 
简单装饰器实现:
def login(func):
def inner(arg):
print("passed user verification...")
func(arg)
return inner
def home(name):
print("welcome %s to home page"%name)
@login #装饰器放在需要装饰的函数上面以@函数名的形式存在,程序执行是会优先执行login函数,并把被装饰的函数的函数名作为参数
def tv(name):
print("welcome %s to TV page"%name)
def movie(name):
print("welcome %s to movie page"%name)
tv("alex")

执行结果:

passed user verification...
welcome alex to TV page

复杂装饰器实现:

def Before(request,kwargs):
print('before') def After(request,kwargs):
print('after') def Filter(before_func,after_func):
def outer(main_func):
def wrapper(request,kargs): before_result = before_func(request,kargs)
if(before_result != None):
return before_result; main_result = main_func(request,kargs)
if(main_result != None):
return main_result; after_result = after_func(request,kargs)
if(after_result != None):
return after_result; return wrapper
return outer @Filter(Before, After)
def Index(request,kargs):
print('index') Index("alex","abc")
执行结果:

before
index
after

递归:递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的。
 
递归算法解决问题的特点:
(1)递归就是在过程或函数里调用自身。
(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4)在递归调用过程中系统为每一层的返回点、局部变量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
 
要求:
1.每次调用在规模上都有所减小(通常减半);
2.相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
3.在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将进入死循环而不能正常结束。
 
用递归算法打印斐波那契列表:
def func(arg1,arg2):
if arg1 == 0:
print(arg1)
print(arg2)
arg3 = arg1 + arg2
print(arg3)
if arg3 > 100:
pass
else:
func(arg2, arg3) func(0,1)
执行结果:

0
1
1
2
3
5
8
13
21
34
55
89
144

正则表达式:
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
正则表达式用法可以参考一下博客:
 
 
 
 

最新文章

  1. Oracle 学习之路开始
  2. iptables 用法
  3. Java之--Java语言基础组成—数组
  4. Android 动态Tab分页效果
  5. ISO/OSI网络体系结构和TCP/IP协议模型
  6. offset()值不准问题
  7. jquery实战第一讲---概述及其入门实例
  8. 如何解决Java警告信息:&quot;objc[31336]: Class JavaLaunchHelper is implemented in both places ...&quot;
  9. eclipse中文乱码修改新方法
  10. Curator框架基础使用
  11. 洛谷 P1627 [CQOI2009]中位数 解题报告
  12. shell脚本计算斐波那契数列
  13. angular的一次小错误
  14. 《Science》:对年轻科学家的忠告
  15. 免费获取 Kaspersky Small Office Security 90 天授权
  16. Webpack-simple cross-env 不是内部或外部命令问题处理
  17. RNN: Feed Forward, Back Propagation Through Time and Truncated Backpropagation Through Time
  18. Beta阶段项目展示博客
  19. Metlnfo cms后台getshell漏洞复现
  20. Android WebView remote debugging

热门文章

  1. Qt保证只有一个实例(将CreateMutex得到的handle通过转换得到值)
  2. (92) Is there a better crawler than Scrapy? - Quora
  3. hdu 1394 zoj 1484 求旋转序列的逆序数(并归排序)
  4. Ubuntu下lamp(PHP+Mysql+Apache)搭建+完全卸载卸载方法
  5. java 学习 ——计算器小程序
  6. java concurrent之前戏synchronized
  7. Duanxx 的 STM32 学习: 中断向量表操作
  8. TCP各种连接状态注释
  9. JS年月日三级联动下拉框日期选择代码
  10. /usr/bin/env: node: no such file or directory