1、函数名

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

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

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

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

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

  代理模式?

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

python摸爬滚打之day11----函数闭包,迭代器 Python 第1张
1 def chi(f):
2     print("吃汉堡")
3     f()
4     print("吃炸鸡")
5 def he():
6     print("喝肥宅快乐水")
7 
8 chi(he)
代理模式

2、闭包

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

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

python摸爬滚打之day11----函数闭包,迭代器 Python 第3张
 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 循环遍历机理?

python摸爬滚打之day11----函数闭包,迭代器 Python 第5张
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: 只能向后执行, 不能再返回前一级.

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄