一、 函数对象
函数对象:函数是第一类对象,即函数可以当作数据传递
1 可以被引用
2 可以当作参数传递
3 返回值可以是函数
3 可以当作容器类型的元素
二、 函数的嵌套
1 函数的嵌套调用
2 函数的嵌套定义
def f1():
def f2():
print('from f2')
def f3():
print('from f3')
f3()
f2()
三、 名称空间与作用域
三种名称空间:
内置名称空间: 随着python解释器的启动而产生
全局名称空间: 文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入改空间
局部名称空间: 调用函数时会产生局部名称空间,只在函数调用时临时绑定,调用结束解绑定
作用域:
1. 全局作用域: 内置名称空间,全局名层空间
2. 局部作用 局部名称空间
全局作用域: 全局有效,在任何位置都能被访问到,除非del删掉,否则会一直存活到文件执行完毕
局部作用域的名字: 局部有效,只能在局部范围调用,只在函数调用时才有效,调用结束就失效
名字的查找顺序: 局部名称空间---》全局名层空间---》内置名称空间
查看全局作用域内的名字:gloabls()
查看局局作用域内的名字:locals()
四、 闭包
1.定义在内部函数
2. 包含对外部作用域而非全局作用域的引用,该内部函数就成为闭包函数
特点:闭包应用:惰性计算
五、 装饰器
六、 迭代器
迭代的概念:重复+上一次迭代的结果为下一次迭代的初始值重复的过程称为迭代,每次重复即一次迭代,并且每次迭代的结果是下一次迭代的初始
为什么要有迭代器?对于没有索引的数据类型,必须提供一种不依赖索引的迭代方式
可迭代的对象:内置__iter__方法的,都是可迭代的对象
七、 生成器
生成器函数:只要函数体包含yield关键字,该函数就是生成器函数
生成器就是迭代器
yield的功能:
1.相当于为函数封装好__iter__和__next__
2.return只能返回一次值,函数就终止了,而yield能返回多次值,每次返回都会将函数暂停,下一次next会从上一次暂停的位置继续执行
八、 内置函数