python学习笔记12 函数名是变量 闭包 迭代器

函数是一个变量,但他是一个特殊的变量,与括号配合可以执行函数的变量

函数名是个对象

函数名可以当list里的元素进行使用

函数名可以作为参数,传递给另一个函数

函数名总结:

函数名的应用,第一类对象

函数名可以像变量一样进行使用: 1 赋值 2作为list元素 3作为参数 4 作为返回值

 

闭包

定义: 内层函数对外层函数的局部变量的访问

可以让一个局部变量常驻内存

变量直接写在全局是不安全的,容易被其他层函数通过 global 修改

闭包的作用

1 常驻内存,以待随时调用

2 防止其他程序改变这个变量

函数名._closure_  检测函数是否是闭包,运行结果为None表明不是闭包

闭包总结

    内部函数访问外部函数的局部变量

    好处: 1 安全 2常驻内存,提交效率

[

首先给出闭包函数的必要条件:

  • 闭包函数必须返回一个函数对象
  • 闭包函数返回的那个函数必须引用外部变量(一般不能是全局变量),而返回的那个函数内部不一定要return

            __closure__属性返回的是一个元组对象,包含了闭包引用的外部变量。

          ·  若主函数内的闭包不引用外部变量,就不存在闭包,主函数的_closure__属性永远为None:

           ·  若主函数没有return子函数,就不存在闭包,主函数不存在_closure__属性:

三、为何叫闭包

            先看代码:

def line_conf(a):
    b = 1
 
    def line(x):
        return a * x + b
 
    return line
 
 
line_A = line_conf(2)
b = 20
print(line_A(1))  # 3
              如你所见,line_A对象作为line_conf返回的闭包对象,它引用了line_conf下的变量b=1,在print时,全局作用域下定义了新的b变量指向20,最终结果仍然引用的line_conf内的b。这是因为,闭包作为对象被返回时,它的引用变量就已经确定(已经保存在它的__closure__属性中),不会再被修改。

               是的,闭包在被返回时,它的所有变量就已经固定,形成了一个封闭的对象,这个对象包含了其引用的所有外部、内部变量和表达式。当然,闭包的参数例外。
————————————————
版权声明:本文为CSDN博主「海的邻居」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sc_lilei/article/details/80464645

]

 

迭代器

可迭代对象数据类型中都有一个函数__iter__(),所有包含了__iter__()的数据类型都是可迭代的数据类型 iterable

dir() 可以查看一个对象,数据类型中包含了哪些东西

迭代器使用__next__() 往外拿元素,迭代到最后一个元素之后,再进行迭代就会报错StopIteration

迭代器一定是可迭代的,迭代器里面一定有__next__(),__iter__()

迭代器的迭代器是他本身

迭代器的特点:

1 节省内存 

2 惰性机制

3 只能往前拿,不能反着拿

迭代器总结:

可迭代对象(Iterable) :内部包含__iter__()     比如 str, list,tuple,se,dict, range   isinstance( ) ----> Iterable

迭代器(Iterator) :内部含有__iter__() __next__()   比如 f   isinstance( ) ----> Iterator

迭代器特点: 1 省内存 2 惰性机制 3只能向前

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章