• 函数(三)


    1.函数名的应用(第一类对象)

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

      函数名其实就是变量名

      1.可以作为列表中的元素进行存储

        

    1 def func1():
    2     pass
    3 def func2():
    4     pass
    5 lst = [func1,func2]
    6 for el in lst:
    7     el()

      2.可以作为参数传递给函数

     

    1 def fun():
    2     pass
    3 def proxy(fn):
    4     fn()
    5 proxy(func)

      3.可以作为函数的返回值

    1 def fun():
    2     def inner():
    3         pass
    4     return inner
    5 fun()()

    2.闭包

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

    好处:

      1.保护你的变量不受外界影响

      2.可以让变量常驻内存

      3.写法:

        

    1 def outer():
    2     a =  10
    3     def inner():
    4         print(a)
    5     return inner

    3.迭代器

    使用dir来查看该数据包含了哪些方法

    1 print(dir(str))#有__iter__
    2 print(dir(int))#没有__iter__
    3 print(dir(list))#有__iter__

    4 print(dir(tuple))#有__iter__

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

    可迭代对象:iterable,里面有__iter__()可以获取迭代器,没有__next__()

    迭代器:iterator,里面有__iter__()可以获取迭代器,有__next__()

    所有的带__iter__可以使用for循环,是可迭代对象

    可迭代对象可以使用__iter__()来获取迭代器,迭代器里面有__next__()


    迭代器的特点:

      1.只能向前

      2.惰性机制

      3.省内存(生成器)

    迭代器模拟for循环:

      

     1 lst = [1,2,3,4,5]
     2 for el in lst:
     3     print(el)
     4 
     5 lst = [1,2,3,4,5]
     6 it = lst.__iter__()#获取迭代器
     7 while 1:
     8     try:#尝试执行
     9         el = it.__next__()
    10         print(el)
    11     except StopIteration:#处理错误
    12         break

    通过dir来判断数据是否是可迭代的,以及数据是否是迭代器

    1 print("__iter__" in dir(it))
    2 print("__next__" in dir(it))

    通过isinstance()来判断

    1 from collections inport Iterable#可迭代对象
    2 from collections import Iterator#迭代器
    3 
    4 
    5 print(isstance(lst,Iterable))
    6 print(isstance(lst,Iterator))

    把参数放在list()里面进行迭代

    1 lst = [1,2,3,4,5]
    2 it = lst.__iter__()
    3 s = list(it)
    4 print(s)

    结果为[1,2,3,4,5]

    for 循环的内部机制:

      1.首先获取到迭代器

      2.使用while循环获取数据

      3.it.__next__()来获取数据

      4.处理异常  tyr:xxx  except StopIteration:xxx

      

    1 it = xx.__iter__()
    2 while 1:
    3     try:
    4         data = it.__next__()
    5         xxx
    6     except StopIteration:
    7         break
  • 相关阅读:
    HierarchicalDataTemplate
    Prism技巧
    常用Exception
    netcore URL重新路径
    Nintendo Switch相册整理
    交换变量-不借助任何变量
    QCombobox样式stylesheet总结
    Qt新旧Moc方式升级功能
    QSS使用方法总结
    【QRegExp】QLineEdit屏蔽空格
  • 原文地址:https://www.cnblogs.com/s593941/p/9455775.html
Copyright © 2020-2023  润新知