当前位置: 移动技术网 > IT编程>脚本编程>Python > python摸爬滚打之day11----函数闭包,迭代器

python摸爬滚打之day11----函数闭包,迭代器

2018年10月31日  | 移动技术网IT编程  | 我要评论

名片光盘,笨笨723,小学教案

1、函数名

  函数名就是一个变量名, 函数名存储的是该函数的内存地址.  

     函数名都可以进行哪些应用?

    函数名可以赋值给其他的变量;

    函数名可以作容器里的元素使用;

    函数名可以当做形参传进另一函数;

    函数名可以作为函数的返回值, 即 return func, 在全局调用.

  代理模式?

    给某一函数在执行前后执行后加上某些功能, 是装饰器的雏形.

1 def chi(f):
2     print("吃汉堡")
3     f()
4     print("吃炸鸡")
5 def he():
6     print("喝肥宅快乐水")
7 
8 chi(he)
代理模式

2、闭包

  内层函数对外层函数的变量的引用. 

  作用:  1, 保护变量不受更改;  2, 让变量常驻于内存不会被销毁.

 1 # 闭包
 2 def outer():
 3     a = 100
 4     def inner():        # inner()函数要用到父级的a, 所以inner()函数就是一个闭包.
 5         b = a + 50
 6         return b
 7     return inner       # 函数名作为函数的返回值,在全局调用
 8 
 9 ret = outer()
10 ret()                   # 在外部调用里层的函数
闭包

3、迭代器

  (前情:)内置函数---- dir(查询的对象) : 可以查出该对象可以执行的操作(即内部可执行方法)

      可以用dir(list)查询是否有__iter__() 或__next__() 方法.

  可迭代对象: 可循环遍历的对象, 即str, list, dic, tuple, set.  内部只有__iter__()方法.

  迭代器: 内部既有__iter__() 方法,也有__next__() 方法. 

  for 循环遍历机理?

1 lst = ["李白","李黑","李太白","李太黑","李不白",]    # 可迭代对象
2 it = lst.__iter__()                                    # 先变成迭代器         
3 while 1:
4     try:
5         content = it.__next__()                     #  迭代器通过__next__()来取值
6         print(content)
7     except stopiteration:                  # 取完了就直接添加错误,然后停止 
8         print("遍历完了可以结束了")
9         break
for循环遍历机理

  判断一个对象(str)是否是一个可迭代对象?

    1: 通过dir(str) 看有没有__iter__();

    2: print("__iter__()" in dir(str) ) ----> true : 是可迭代对象;

    3: from collections import iterable, iterator

     print( isinstance(str, iterable) )  ----> true : 是可迭代对象

  迭代器的三个特点?

    1: 节省内存(用生成器);

    2: 惰性机制, 必须使用__next__()来获取数据;

    3: 只能向后执行, 不能再返回前一级.

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网