zoukankan      html  css  js  c++  java
  • 迭代器,闭包,递归

    迭代器

    函数名的使用

    函数名可以当作值赋值给变量

    函数名可以当作元素放到容器里

    返回函数名的时候不能加()

        return aa

    func()

    func()的作用变成aa() 返回去执行aa函数

    1 def func():
    2     def aa():
    3         print(2)
    4         return None
    5     return aa()  # return None
    6 func() # func() == None
    7 输出值是 2
    8 return aa()
    9 先调用aa函数 return返回值是aa函数的返回值

    闭包

    1.首先有一个嵌套函数

    2.在嵌套函数内部的函数使用外部(非全局)的变量

    满足这两点要求的函数就是闭包

    print(函数名.__closure__)    输出结果不是None就是闭包

    可以将函数名当作返回值返回,在全局调用

    python中,闭包会进行内存驻留,而普通函数在执行后用完了就销毁了

    全局里存放会有污染和不安全的现象

    装饰器的本质是闭包

    闭包的弊端:会出现内存泄漏

    def func():
        name = 'eva'
        def inner():
            print(name)
            print(inner.__closure__)   #有cell  所以是闭包
        return inner
    func()()
    简单的闭包

    迭代器

    可迭代对象

    可以被for循环的就是可迭代对象

    python协议  具有__iter__方法的就是可迭代对象

    创建一个迭代器

    a = 对象.__iter__

    具有__iter__ 和  __next__方法的就是一个迭代器

    1 li = [1,2,3]
    2 a = li.__iter__()
    3 print(a.__next__())
    4 print(a.__next__())  #一个一个取
    5 print(a.__next__())

    迭代器特性

    惰性机制  一行一行往下走

    不能从下向上走

    一次性的 用完就没了

    for循环的机制就是迭代器

     1 li = [1,2,3,4,6,7,87,8,9,90,0,0,0,0,8,7,7,67,]
     2 em = li.__iter__()
     3 while 1:
     4     try:
     5         print(em.__next__())
     6 
     7     except StopIteration:
     8         break
     9 
    10 try 和 except是用来排错的  如果程序报错执行except下面的break

    递归

    两点要求:自己调用自己本身    有明确结束条件

    def func(n):
        n+=1
        print(n)
        if n == 5:
            return
        func(n)
    func(2)
    输出结果为
    3
    4
    5

    递归的效率比较低,尾递归的用时和for的用时是一样的,比for慢

    递归的应用场景:

    在不明确要循环的次数的时候,可以用递归

    递归操作文件目录

  • 相关阅读:
    DIY 作品 及 维修 不定时更新
    置顶,博客中所有源码 github
    openwrt PandoraBox PBR-M1 极路由4 HC5962 更新固件
    使用 squid 共享 虚拟专用网至局域网
    第一次参加日语能力测试 N5
    libx264 libfdk_aac 编码 解码 详解
    开发RTSP 直播软件 H264 AAC 编码 live555 ffmpeg
    MFC Camera 摄像头预览 拍照
    http2 技术整理 nginx 搭建 http2 wireshark 抓包分析 server push 服务端推送
    plist 图集 php 批量提取 PS 一个个切
  • 原文地址:https://www.cnblogs.com/biulo/p/10538678.html
Copyright © 2011-2022 走看看