第三周小结

一、函数对象

1、函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即函数名就是对象‘

2、函数对象的应用

      可以直接被引用

      可以当作函数参数传递

      可以当作函数的返回值

      可以作为容器类型的元素

二、名称空间

1、名称空间:存放名字与内存空间地址对应关系的容器

2、作用:解决由于名字有限,导致名字重复发送冲突的问题

3、三种名称空间:

      Build-in:内置名称空间,系统级,一个,随解释器执行而产生,解释器停止而销毁

      Global:全局名称空间,文件级,多个,随所属文件的加载而产生,文件运行完毕而销毁

       Local:局部名称空间,函数级,多个,随所属函数执行而产生,函数执行完毕而销毁

4、global关键字可以将局部的名字提升为全局的名字

5、nonlocal可以在被嵌套的函数中修改外部函数变量的值(前提是外部函数中先定义了变量)

三、函数的嵌套定义:将函数直接定义到另一个函数内部,可以使用外部函数中的名字

四、四种作用域

Built-in:内置作用域,作用于所有文件所有函数

Global:全局作用域,当前文件所有函数

Enclosing:嵌套作用域,当前函数与当前函数的内部函数

Local:局部作用域,当前函数

查找顺序:LEGB

五、闭包:

1、闭包结构:将函数进行闭包处理

                        提升函数名的作用域,将内部函数对象作为外部函数的返回值

六、装饰器

1、开放封闭原则:不修改原代码,不修改调用方式增加新功能

2、固定写法:

def wrarrer(func):

         def inner(*args,**kwargs):

                  前加功能

                  res = func(*args,**kwargs)

                  后加功能

            return res

          return inner

 

@wrapper       # f = wrapper(f)

def f()

     pass

f()

七、迭代器

1、优点:不依赖索引,完成取值

      缺点:不能计算长度,不能指定位置取值(只能从前往后逐一取值)

2、可迭代对象:有_iter_()方法的对象,调用该方法返回迭代器对象

3、迭代器对象:有_next_()方法的对象,也就是用该方法一次从迭代器对象中取一个值,取一个少一个

4、for循环迭代:自动获取被迭代对象的迭代器对象

                            在内部一次一次调用_next_()方法取值

                            自动完成异常处理

5、生成器:包含yied关键字的函数

八、补充

1、三元运算符:

a if a > b else b          #满足条件取a,不满足取b

2、列表推导式:

res = [(k,v) for k, v in dic.items()]

3、字典推导式:

res = {k:v for k, v in lis}

4、递归:函数的自我调用

5、匿名函数:lambda  参数列表  一个返回值;结合内置函数来使用

res = max(lis, key = lambda x : x)

6、内置函数

max(iterable, key = lambda x : iterable[x])        #x字典的key     返回值:做比较的值

猜你喜欢

转载自www.cnblogs.com/yanminggang/p/10659017.html