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


    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: 只能向后执行, 不能再返回前一级.

  • 相关阅读:
    认识hasLayout——IE浏览器css bug的一大罪恶根源 转
    web网站p教程 转
    可遇不可求的Question之SQLServer的INSERT ON DUPLICATE KEY UPDATE语法篇
    可遇不可求的Question之Protoc.exe无法编译proto文件篇
    python各个版本的下载地址
    可遇不可求的Question之WCF发布无法运行篇
    [转]理解JSON:3分钟课程
    可遇不可求的Question之Silverlight发布IIS设置篇
    可遇不可求的Question之C#中的匿名事件导致内存泄露的解决篇
    可遇不可求的Question之mysql连接数暴增的解决方法篇
  • 原文地址:https://www.cnblogs.com/bk9527/p/9882648.html
Copyright © 2020-2023  润新知