欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-14 20:25:23
1、函数名 函数名就是一个变量名, 函数名存储的是该函数的内存地址. 函数名都可以进行哪些应用? 函数名可以赋值给其他的变量; 函数名可以作容器里的元素使用; 函数名可以当做形参传进另一函数; 函数名可以作为函数的返回值, 即 return func, 在全局调用. 代理模式? 给某一函数在执行前后 ......

1、函数名

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

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

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

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

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

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

  代理模式?

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

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

2、闭包

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

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

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