• 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
  • 相关阅读:
    24、合并两个有序链表
    23、反转链表
    22、删除链表的倒数第N个节点
    21、删除链表中的节点
    18、实现strStr()
    17、字符串转换整数 (atoi)
    15、有效的字母异位词
    16、验证回文字符串
    14、字符串中的第一个唯一字符
    mybatis入门(七)----延迟加载
  • 原文地址:https://www.cnblogs.com/cbslock/p/11149501.html
Copyright © 2020-2023  润新知