一:复习
1.*args,**kwargs:
*args :接收溢出的位置参数
**kwargs:接收溢出的关键字参数
2.函数对象:可被当作数据传递
- 函数可以当作参数传给另一个函数
- 一个函数的返回值也可以是一个函数(打破函数的层级限制)
3.名称空间和作用域
名称空间
- 分三种
内置名称空间:python解释器启动时则生效
全局名称空间:执行python文件时生效
局部名称空间:调用函数时,临时生效,函数调用结束则失效
- 加载顺序:先内置 再全局 ,最后有可能产生局部
- 查找名字顺序:选局部再全局,最后内置
作用域:
-分两种
全局作用域:全局存活,全局有效
局部作用域:临时存活,局部有效
强调:作用域关系在函数定义阶段就已经固定,与调用位置无关
二:闭包函数定义:定义在函数内部的函数,特点是:包含对外部作用域而不是对全局作用域的引用,该函数就叫做闭包函数
三:装饰器
1.为什么要用装饰器:开放封闭原则,对扩展是开放的,对修改是封闭的
2.什么是装饰器
-用来装饰他人,装饰器本身可以是任意可调用对象,被装饰器的对象也可以是任意可调用对象
-遵循的原则:1.不修改被装饰对象的源代码 2.不修改被装饰对象的调用方式
- 目标是:在遵循原则1.2点前提下,为被装饰器对象添加上新功能
四:迭代器
1 什么叫迭代:迭代是一个重复过程,每次重复都是基于上一次的结果来的
2 为什么要用迭代器?
l=[‘a‘,‘b‘,‘c‘]
n=0
while n < len(l):
print(l[n])
n+=1
- 对于序列类型:字符串,列表,元组,可以使用基于索引的迭代取值方式,而对于没有索引的类型,如字典,
集合、文件,这种方式不再适用,于是我们必须找出一种能不依赖于索引的取值方式,这就是迭代器
3 可迭代的对象:只要对象内置有__iter__方法,obj.__iter__
4 迭代器对象:对象既内置有__iter__方法,又内置有__next__,如文件对象
注意:可迭代对象不一定是迭代器对象,而迭代器对象一定是可迭代的对象
迭代器的优缺点:
- 优点:
提供了一种统一的迭代取值方式,该方式不再依赖于索引
更节省内存
- 缺点:
无法统计长度
一次性的,只能往后走,不能往前退,无法获取指定位置的值
五:生成器
定义:只要函数内部出现yield关键字,那么再调用该函数,将不会立即执行函数体代码,会到到一个结果
该结果就是生成器对象
Yield的功能:
-为我们提供了一种自定义迭代器的方式
- 对比return,可以返回多次值,挂起函数的运行状态
day4
原文:http://www.cnblogs.com/xiawanwan/p/7636039.html