zoukankan      html  css  js  c++  java
  • 函数的闭包 迭代器的使用

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

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

    (1)由数字,下划线,字母组成

    (2)不能使用python关键字

    (3)不能由纯数字或数字开头

    (4)要有意义

    (5)不要太长

    (6)不要使用中文

    (7)推荐使用驼峰或下划线命名

    闭包的好处,让变量常驻内存,看例子 

    def outer():
      a=10      闭包中 这里最耗内存  用的时间长
      def inner
      print(a)
      return inner
    outer()()  从头执行了一遍inner
    outer()()  再次从头执行一遍inner 闭包的作用就没有用到 闭包的特点就是省内存

    def outer():
    a=10
    def inner():
    print(a)
    return inner
    ret=outer()  访问外部函数,获取到内部函数的函数地址
    ret()  从头开始执行了一遍inner(内部函数)
    ret()   再次访问inner 不从头执行 而是从def inner() 处执行  用到了闭包的效果 这样子就比较节省内存 

    两个函数中outer()()与ret=outer() ret()有什么区别:
    第一个outer()()
    outer()() 从头(从def outer())在从头开始执行了一遍inner后 没有用到闭包的功能
    第二个ret=outer()
    ret()  从头执行了一遍inner
    ret()  在从def inner(): 处执行 不经过a=10(耗内存,耗时间) 用到了闭包中的节省内存
    闭包的特点是:
    1 保护你的变量不受外界影响
    2 可以让变量常驻内存

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

    def func1():
    pass
    def func2():
    pass
    lst=[func1,func2]
    for el in lst:
    el()
    

     可以作为参数传递给函数

    def func():
    def proxy(fn):
    fn()
    proxy(func)
    

     可以作为函数的返回值

    def func():
      def inner():
    pass
      return inner
    func()()
    

    2闭包

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

    好处:
    1 保护你的变量不受外界影响

    2 可以让变量常驻内存

    写法:

    def outer():
    a=10
    def inner():
    print(a)
    return inner
    

     3 迭代器

    使用dir来查看该数据包含了那些方法,可迭代对象可以使用_iter_()来获取到迭代器,可迭代器里面有_next_()

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

    可迭代对象:lterable,里面有_iter_()可以获取迭代器,没有_next_()

    迭代器:lteraor 里面有_iter_()可以获取迭代器 还有_next_()

    迭代器的特点:

    1 只能向前

    2 惰性机制

    3 省内存

    for 循环的内部机制

    for i in [1,2,3]:
    print(i)
    
    结果:
       1
       2
       3

    1 首先获取到迭代器

    2 使用while循环获取数据

    lst=[1,2,3]
    lst_iter=lst.__iter__()
    while:
    try:
    i=lst_iter.__next__()   来获取值
    print(i)
    except StopIteration:
    brerak

    try: except StopIteration  捕获错误 自己承担 (当执行完最后一个时 在使用__next__就会报错 因为没有下一个元素)

    3 it._next_()来获取数据

    4处理异常try:     except Stoplteration

    lst =["章子怡","王力宏","马勇","张韶涵","茉莉花"]
    it = lst._iter_()
    while 1:
    try:
    data=it._next_()
    for el in lst:
    print(el)
    except Stoplteration
    break


    结果:章子怡
     王力宏
     马勇
     张韶涵
     茉莉花
  • 相关阅读:
    Flexigrid 完成表格数据显示
    地图高度自适应
    Vmware汉化版下载
    EasyUI grid 封装JSON数据
    C# 中的委托和事件
    C#中的委托和事件(续)
    从dataReader到Entity转化时利用Reflect示例
    sql 压缩数据库出错
    输入日期可以计算星期几
    用CSS调整scrollbar(滚动条)的配色
  • 原文地址:https://www.cnblogs.com/mlhz/p/9455557.html
Copyright © 2011-2022 走看看