首页 > 代码库 > 函数对象,函数的嵌套,名称空间与作用域,闭包,装饰器,迭代器,内置函数
函数对象,函数的嵌套,名称空间与作用域,闭包,装饰器,迭代器,内置函数
一,函数对象
函数对象:函数是第一类对象,即函数可以当做数据传递
1,可以被引用
2,可以做参数的传递
3,返回值可以是函数
4,可以当作容器类型的元素
二,函数嵌套
1,函数的嵌套调用
2,函数的嵌套定义
三,名称空间与作用域
名称空间:存放名字的地方叫名称空间,存放这些值与名字的绑定关系
三种名称空间
查看全局作用域内名字的方法:gloabls()
查看全局作用域内名字的方法 :locals()
四,闭包
五,装饰器
为什么要用装饰器?
1,开放封闭原则,对修改是封闭的,对扩展是开放的
2,装饰器就是为了在不修改被装饰对象的源代码以及调用方式的前提下,为其添加新功能
装饰器:在遵循下面两个原则的前提下为被修饰者添加新功能
必须遵循两个原则:
1,尽量不要修改源代码
2,不能修改调用方式
装饰器:修饰别人的工具,修饰:添加功能,工具指的是函数
装饰器本身可以是任何可调用对象,被装饰的对象也可以是任意可调用对象
无参函数的简单语法
多个装饰器
六,迭代器
为什么要有迭代器?
对于没有索引的数据类型,必须提供一种不依赖索引的迭代方式
迭代的概念:重复+上一次迭代的结果为下一次迭代的初始值,重复的过程称为迭代,每次重复即一次迭代,并且每次迭代的结果是下一次迭代的初始值
执行__iter__方法,得到的结果就是迭代器
迭代器的有点和缺点:
优点:1,提供了一种不依赖下标的迭代方式
2,就迭代器本身来说,更节省内存
缺点: 1,无法获取迭代器对象的长度
2,不如序列类型取值灵活,是一次性的,只能往后取,不能往前退
迭代协议:
对象有__next__
对象有__iter__,对于迭代器来说,,执行__iter__方法,得到的结果仍然是它本身
可迭代对象
只有文件是迭代器对象__next__是迭代器
__next__一次只能取一个值
抛出异常:StopIteration说明值已取完
取字典value的值和处理异常
生成器函数:只要函数体包括yield关键字,该函数就是yield就是生成器函数
yield的功能:
1,相当于为函数装好__iter__和__next__
2,return只能返回一次值,函数就终止了,而yield能返回多次值,每次返回都会将函数暂停,下一次next会从上一次暂停的位置继续执行。
七,内置函数
函数对象,函数的嵌套,名称空间与作用域,闭包,装饰器,迭代器,内置函数