zoukankan      html  css  js  c++  java
  • 10函数名的应用,闭包,和迭代器

    1、函数名的应用:

      函数的命明规范和变量是一样的

      函数名即变量名

      应用如下:

     1         可以作为列表中的元素进行存储
     2         def func1():
     3             pass
     4         def func2():
     5             pass
     6         lst = [func1,func2]
     7         for el in lst:
     8             el()
     9         可以作为参数传递给函数
    10         def func():
    11             pass
    12         def proxy(fn):
    13             fn()
    14         proxy(func)
    15         可以作为函数的返回值
    16         def func():
    17             def inner():
    18                 pass
    19             return inner
    20         func()()

    2、闭包

      闭包:在内层函数中访问外层函数的局部变量

      作用:

        1、可以保护变量不受外界影响

        2、可以让变量常驻内存,不会被释放。

      写法:    

     1             def outer():
     2                 a = 10
     3                 def inner():
     4                     print(a)
     5                 return inner
     6             正确使用姿势:
     7                 def outer():
     8                     a = 10 # 假设是一个很耗时的东西
     9                     def inner():
    10                         print(a)
    11                     return inner
    12                 outer()()
    13                 outer()()   ---错误使用姿势
    14                 --------------
    15                 ret = outer()
    16                 ret()
    17                 ret()    -----正确使用姿势

    3、迭代器

      for循环的本质就是迭代器。

      可以用来遍历列表,字符串,元祖...可迭代对象

      可迭代对象:Iterale,里面有__iter__(),没有__next__()

      迭代器:Iterator,里面有__iter__(),还有__next__()

      迭代器特点:

        1、只能向前

        2、惰性机制

        3、省内存

      for循环的内部机制(即迭代器执行机制)

     1             1、首先获取到迭代器
     2             2、使用while循环获取数据
     3             3、it.__next__()来获取数据
     4             4、处理异常try:xxx except StopIteration:
     5 
     6             it = xx.__iter__()
     7             while 1:
     8                 try:
     9                     data = it.__next__()
    10                     xxxxxx
    11                 except StopIteration:
    12                     break
  • 相关阅读:
    面向对象与组合
    异常处理和三级菜单练习
    装饰器和生成器
    序列化模块
    leetcode_498. 对角线遍历
    leetcode_566. 重塑矩阵
    leetcode_59. 螺旋矩阵 II
    leetcode_54. 螺旋矩阵
    leetcode_396. 旋转函数
    leetcode_200. 岛屿数量
  • 原文地址:https://www.cnblogs.com/cbslock/p/11149501.html
Copyright © 2011-2022 走看看